Niet alle lege values zijn verwijderd

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

G P

G P

22/02/2019 15:52:11
Quote Anchor link
Bij het volgende script krijg ik toch nog lege waarden te zien. Bij de var_dump is zelfs duidelijk te zien dat 1 spatie toch een String (2) te zien is (Nieuwe lijn ??)
Ik zie door het bos de bomen even niet meer...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php

// Start een nieuwe sessie
session_start();

// URL naar het menu
$menu_link = 'https://www.fresh-food-service.be/menus';

// Get contents
$text = file_get_contents($menu_link);

// Alleen gegevens in <table>
$regex = '#<\s*?table\b[^>]*>(.*?)</table\b[^>]*>#s';
$code = preg_match($regex, $text, $matches);
$table = $matches[0];

// Splits in delen om elke dag apart te hebben
$parts = preg_split('@(?=<td)@', $table);

// Elk deel controleren...
foreach ($parts as $part){
    // ... tags verwijderen behalve <br>
    $part = strip_tags($part, '<br>');
    // ... <br> omzetten naar 1 spatie
    $part = preg_replace("/<br\W*?\/>/", " ", $part);
    // Explodeer elke nieuwe lijn
    $exp = explode("\n", $part);
    // Elke lijn controleren ...
    foreach ($exp as $key => $string){
        // ... Spaties en nieuwe lijnen verwijderen
        $string = trim(preg_replace('/\s\s+/', '', $string));
        // Lege values verwijderen
        if (empty($string)){
            unset($exp[$key]); // Verwijderen
        }
    }

    // Filteren
    $exp = array_filter($exp, 'strlen');
    // Tonen
    print '<pre>'.PHP_EOL;
    var_dump($exp);
    print '</pre>'.PHP_EOL;
}


?>
Gewijzigd op 22/02/2019 15:53:01 door G P
 
PHP hulp

PHP hulp

29/11/2024 09:48:23
 
Adoptive Solution

Adoptive Solution

22/02/2019 16:28:33
Quote Anchor link
Ik denk dat bij het typen van het menu een 'non breakable space' is ingevoerd.

Uitleg : https://word.tips.net/T001081_Inserting_a_Non-Breaking_Space.html

Da's in de html als spatie zichtbaar, maar in de DOM als &nbsp;

Je zou dus daarop moeten controleren :

https://everythingfonts.com/ascii/codes/160
Gewijzigd op 22/02/2019 16:30:17 door Adoptive Solution
 
G P

G P

22/02/2019 16:49:25
Quote Anchor link
In de broncode staat ook een gewone lege spatie. Indien het als &nbsp; zou zijn dan zou ik dit zien in de broncode. Echter is in de broncode ook niet te zien dat het een nieuwe lijn is maar de spatie word toch weergegeven als 2 tekens.
 
Adoptive Solution

Adoptive Solution

22/02/2019 16:55:23
Quote Anchor link
Weet ik. Maar in de DOM zie je &nbsp;

Enniewee

Je zou deze regel kunnen vervangen door

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if ( empty( $string ) )


door

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if ( strlen( $string ) <= 2 )
 
Rob Doemaarwat

Rob Doemaarwat

22/02/2019 17:09:58
Quote Anchor link
Het is wel een non-breaking-space. Alleen geen &nbsp; maar een Unicode U+00A0. In een editor ziet die eruit als een spatie, maar is het niet (in sommige editors kun je "Spaties en tabs weergeven" - met bolletjes en pijltjes, en dan zie je dat het geen van beide is).

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
//non-breaking space -> gewone spatie
$text = str_replace('',' ',$text);

//hm, die non-breakable wordt niet weergegeven zo te zien; als je deze tekst quote kun je 'm misschien wel correct kopiëren; anders even uit je menus.html kopiëren.
Gewijzigd op 22/02/2019 17:11:57 door Rob Doemaarwat
 
G P

G P

25/02/2019 19:25:59
Quote Anchor link
Bedankt voor de reacties
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$text = preg_replace('/\xc2\xa0/', ' ', $text);


menus.html is niet mijn website anders had ik het wel gemaakt in een xml file :)
Gewijzigd op 25/02/2019 19:28:22 door G P
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.