$html = file_get_contents("http://www.somesite.com/");
$dom = new DOMDocument();
$dom->loadHTML($html);
echo $dom;
wirft
Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity,
Catchable fatal error: Object of class DOMDocument could not be converted to string in test.php on line 10
htmlentities()
wird das Problem durch Aufrufen oder ähnliches auf der Zeichenfolge behoben.Dies ist falsch. Verwenden Sie stattdessen Folgendes:
quelle
@
?Es gibt 2 Fehler: Der zweite ist, weil $ dom kein String, sondern ein Objekt ist und daher nicht "wiedergegeben" werden kann. Der erste Fehler ist eine Warnung von loadHTML, die durch eine ungültige Syntax des zu ladenden HTML-Dokuments verursacht wird (wahrscheinlich ein & (kaufmännisches Und), das als Parametertrennzeichen verwendet und nicht als Entität mit & maskiert wird).
Sie ignorieren und unterdrücken diese Fehlermeldung (nicht den Fehler, sondern nur die Meldung!), Indem Sie die Funktion mit dem Fehlerkontrolloperator "@" ( http://www.php.net/manual/en/language.operators.errorcontrol ) aufrufen . php )
quelle
Der Grund für Ihren schwerwiegenden Fehler ist, dass DOMDocument keine __toString () -Methode hat und daher nicht wiederholt werden kann.
Sie suchen wahrscheinlich
quelle
Unabhängig vom Echo (das durch print_r oder var_dump ersetzt werden müsste) sollte das Objekt leer bleiben, wenn eine Ausnahme ausgelöst wird:
Lösung
Auf
recover
true undstrictErrorChecking
false setzenVerwenden Sie die Entitätscodierung von PHP für den Inhalt des Markups, was eine der häufigsten Fehlerquellen ist.
quelle
Ersetzen Sie die einfache
mit dem robusteren ...
quelle
Versuche dies
quelle
Eine andere mögliche Lösung ist
quelle
<span>Hello World</span>
. Wenn Sie dieshtmlspecialchars
ausführen,<span>Hello World</span>
wird mehr HTML erstellt. DOMDocument :: loadHTML behandelt es nicht mehr als HTML, sondern als Zeichenfolge.$oDom = new DOMDocument(); $oDom->loadHTML($sHTML); echo html_entity_decode($oDom->saveHTML());
Ich weiß, dass dies eine alte Frage ist, aber wenn Sie jemals die fehlerhaften '&' Zeichen in Ihrem HTML korrigieren möchten. Sie können folgenden Code verwenden:
quelle
Eine andere mögliche Lösung ist, dass Ihre Datei möglicherweise vom ASCII-Typ ist. Ändern Sie einfach den Dateityp.
quelle
Auch danach funktioniert mein Code einwandfrei, daher habe ich gerade alle Warnmeldungen mit dieser Anweisung in Zeile 1 entfernt.
quelle