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...
<?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;
}

?>
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.
Weet ik. Maar in de DOM zie je &nbsp;

Enniewee

Je zou deze regel kunnen vervangen door

if ( empty( $string ) )


door

if ( strlen( $string ) <= 2 )
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).


//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.
Bedankt voor de reacties
$text = preg_replace('/\xc2\xa0/', ' ', $text);


menus.html is niet mijn website anders had ik het wel gemaakt in een xml file :)

Reageren