dedlfix: Doppelt doppelte Anführungszeichen

Beitrag lesen

Tach!

$data = file_get_contents('http://www.testseite.de');
$data = utf8_decode($data);
$doc = new DOMDocument();
$doc->loadHTML($data);

Da die DOM-Extension mit UTF-8 arbeitet, ist es keine gute Idee, ihr eine andere Kodierung vorzusetzen.

Bekomme jede Menge Warnings und einen schweren Fehler:
Warning: DOMDocument::loadHTML(): ID already defined in Entity, line: 3552 in /customers/6/d/c/nachrichtentisch.de/httpd.www/1index.php on line 203

Das sieht nach ungültigem HTML aus. Ein ID-Wert darf pro Dokument nur einmal vorkommen.

Catchable fatal error: Object of class DOMDocument could not be converted to string in /customers/6/d/c/

Du hast die Zeilennummer abgeschitten und auch ansonsten nicht gesagt, auf welche Zeile sich diese Meldung bezieht. Deswegen rate ich mal, dass es im nachfolgenden Code die str_replace-Zeile ist.

$xPath = new DOMXPath($doc);
foreach ($xPath->query('//h2/a') as $element)
{
     $elementneu = str_replace("""",""",$element);
     $hreft = $elementneu->getAttribute('href');

$element enthält ein Objekt der Klasse DOMNode. Diese Klasse hat laut Handbuch keine __toString()-Methode. Du kannst Objekte dieser Klasse also nicht wie einfache Strings verwenden. Selbst wenn das ginge - sprich: die __toString()-Methode vorhanden wäre - kannst du auf die gezeigte Weise keine Stringersetzung vornehmen. Im Stringkontext wird von __toString() lediglich ein String zurückgegeben und auch von str_replace() ist das Ergebnis ein String. Ein solcher ist kein Objekt und hat natürlich auch nicht die Methoden von DOMNode. - Das ist also auf alle Fälle nicht der Weg zum Ziel.

Zu deinem eigentlichen Problem mit den Anführungszeichen kann ich nichts sagen, weil mir nicht klar ist, wie konkret diese in dem zu verarbeitenden Dokument enthalten sind. Wenn der Validator das Dokument anmeckert, dann würde ich damit gar nicht weiterarbeiten wollen. Zwar kann DOMDocument::loadHTML() laut Handbuch mit nicht wohlgeformtem HTML umgehen, aber es ist schlicht unmöglich, aus allen Fehlern ein Ergebnis zu zaubern, das der ursprünglichen Intention entspricht. Das Parse-Ergebnis von loadHTML() kann also als Folge auch beliebig <del>falsch</del><ins>unerwartet</ins> sein.

dedlfix.