So verhindern Sie, dass PHP DomDocument Ihre HTML-Zeichenfolge "repariert"

8

Ich habe versucht, Webseiten mit dem HTML-DomObject zu analysieren, um sie für eine Anwendung zu verwenden, um sie auf SEO-Qualität zu scannen.

Ich habe jedoch ein Problem festgestellt. Zu Testzwecken habe ich eine kleine HTML-Seite geschrieben, die den folgenden inkorrekten HTML-Code enthält:

%Vor%

Wie Sie sehen können, befindet sich der Titel außerhalb des head-Tags. Dies ist der Fehler, den ich erkennen möchte.

Jetzt kommt das Problem, wenn ich curl verwende, um die Antwort-Zeichenfolge von dieser Seite abzufangen, dann sende sie an das dom-Dokument, um es als HTML zu laden, das korrigiert das tatsächlich, indem ich weitere Tags um den Titel anfüge.

%Vor%

Ich habe die curl response Daten überprüft und das ist eigentlich nicht das Problem, irgendwie korrigiert das php DomDocument während der Ausführung der loadHTML () Methode die HTML Syntax.

Ich habe auch versucht, die DomDocument recover-, substituteEntities- und validateOnParse-Attribute auszuschalten, indem ich sie ohne Erfolg auf false setze.

Ich habe Google gesucht, aber bisher konnte ich keine Antworten finden. Ich denke, es ist etwas selten für jemanden, der wirklich möchte, dass das fehlerhafte HTML nicht repariert wird.

Weiß jemand, wie man verhindert, dass das DomDocument meinen kaputten HTML-Code repariert?

Vielen Dank im Voraus

    
Björn 17.01.2012, 11:03
quelle

1 Antwort

7

UPDATE: ab PHP 5.4 können Sie HTML_PARSE_NO_IMPLIED

%Vor%

Ursprüngliche Antwort unten

Sie können nicht. In der Theorie gibt es ein Flag HTML_PARSE_NO_IMPLIED für das in libxml , um zu verhindern, dass implizites Markup hinzugefügt wird, auf das aber nicht zugegriffen werden kann PHP.

Als Nebenbemerkung scheint dieses spezielle Verhalten von der verwendeten LIBXML_VERSION zu abhängen.

Dieses Snippet wird ausgeführt:

%Vor%

auf meinem Rechner wird

geben %Vor%     
Gordon 17.01.2012, 11:06
quelle

Tags und Links