Hallo,
ich will das noch mal etwas verbiegen. Inwzwischen wisse wir, dass:
wennm man erst weiß, wo es kneift, dann findet man die Lösung überall im Internet, auch in den UCN von PHP:
http://php.net/manual/de/domdocument.loadhtml.php -> bigtreeEs ist mir nie aufgefallen, dass die Meta-Angabe
<meta http-equiv="content-type" content="text/html; charset=utf-8">
für die DOMDocument-Klasse zum Verarbeiten von HTML in anderen Kodierungen, als ISO-8859-1 notwendig ist, weil ich die in meinen Testdokumenten drinstehen habe oder die untersuchten Fremdseiten immer in ISO-8859-1 waren.
Und um Gunnar gleich vorzugreifen: Das folgende reicht der DOMDocument-Klasse leider nicht.
Ein sauber aufgebautes HTML-5-Dokument wird also nur mit der antiquierten Meta-Angabe sauber geparst. Es ist und bleibt eben PHP (plastered home production) :-P<meta charset="utf-8">
aber eine Angabe von
<?xml encoding="UTF-8" ?>
die man dem Dokument voranstellt (bisher gilt: wirklich als erste Zeile!), die DomDocument-Classes dazu bewegen, dass ihr HTML-Parser in der Kodierung UTF-8 arbeitet.
Wenn man dies mittels PHP angeben will, sollte man sicherheitshalber die folgende Kostruktion wählen:
## [...]
$page = file_get_contents($url);
$meta = '<' . '?xml encoding="UTF-8" ?' . ">\r\n";
$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadHTML($meta . $page);
wegen der eventuell eingeschalteten Short-Open-Tags. Aber auch bei ausgeschalteten Short-Open-Tags kotzen manche PHP Verionen noch ab, wenn eine derarige Zeile "<?xml ... ?>" auskommentiert im Dokument steht. Das "?>" scheint da trotzdem zu stören.
Grüße
TS