PHP DOMDocument ersetzt DOMElement untergeordnet durch HTML-Zeichenfolge

8

Mit PHP versuche ich eine HTML-Zeichenkette aus einem WYSIWYG-Editor zu übernehmen und die untergeordneten Elemente eines Elements in einem vorgeladenen HTML-Dokument durch das neue HTML zu ersetzen.

Bis jetzt lade ich das Dokument, das das Element identifiziert, das ich nach ID ändern möchte, aber der Prozess zum Konvertieren eines HTML in etwas, das in ein DOME-Element platziert werden kann, entzieht sich mir.

%Vor%     
AWinter 10.02.2010, 00:54
quelle

4 Antworten

13

Wenn die HTML-Zeichenfolge als XML analysiert werden kann, können Sie dies tun (nachdem Sie das Element aller untergeordneten Knoten gelöscht haben):

%Vor%

Wenn $ html_string nicht als XML analysiert werden kann, wird es fehlschlagen. Wenn dies der Fall ist, müssen Sie loadHTML () verwenden, was weniger streng ist - aber es werden Elemente um das Fragment hinzugefügt, das Sie entfernen müssen.

Im Gegensatz zu PHP hat Javascript die Eigenschaft innerHTML, mit der Sie dies sehr einfach tun können. Ich brauchte so etwas für ein Projekt, also erweiterte ich PHPs DOMElement um Javascript-ähnlichen innerHTML-Zugriff.

Damit können Sie auf die Eigenschaft innerHTML zugreifen und diese genau wie in Javascript ändern:

%Vor%

Quelle: Ссылка

    
Keyvan 23.08.2010, 10:15
quelle
1

Sie können loadHTML() für ein Code-Fragment verwenden und dann die resultierenden erstellten Knoten an die ursprüngliche DOM-Struktur anhängen.

    
Amber 10.02.2010 01:03
quelle
1

Die aktuell akzeptierte Antwort schlägt vor, appendXML () zu verwenden, erkennt aber an, dass es nicht mit komplexem HTML umgehen wird, wie es von einem WYSISYG-Editor zurückgegeben wird, wie in der ursprünglichen Frage angegeben. Wie vorgeschlagen, kann loadHTML () dies beheben. aber niemand hat noch gezeigt wie.

Dies ist, was ich glaube, ist die beste / richtige Antwort auf die ursprüngliche Frage zu Kodierung Probleme, "Dokument Fragment ist leer" Warnungen und "Wrong Document Error" Fehler, die jemand wahrscheinlich treffen wird, wenn sie dies von Grund auf neu schreiben. Ich weiß, dass ich sie gefunden habe, nachdem ich den Hinweisen in den vorherigen Antworten gefolgt war.

Dies ist Code von einer Website, die ich unterstütze, die WordPress Sidebar-Inhalt in den $ Inhalt eines Beitrags einfügt. Es nimmt an, dass $ doc ein gültiges DOMDocument ist, ähnlich wie $ doc in der ursprünglichen Frage definiert ist. Es nimmt auch an, dass $ element das Tag ist, nach dem Sie den Sidebar-Inhalt (oder was auch immer) einfügen möchten.

%Vor%

Nachdem all dies getan wurde, wenn Sie nicht die Quelle eines vollständigen HTML-Dokuments mit Body-Tags haben möchten und was nicht, können Sie den lokalisierten HTML-Code mit diesem erzeugen:

%Vor%     
Brian Layman 18.10.2016 21:04
quelle
0

Ich weiß, das ist ein alter Thread (aber antworte darauf, weil du auch nach einer Lösung suchst). Ich habe eine einfache Methode entwickelt, um Inhalte durch nur eine einzige Zeile zu ersetzen, wenn ich sie benutze. Um die Methode besser zu verstehen, füge ich auch einige Funktionen mit Kontextnamen hinzu.

Dies ist jetzt ein Teil meiner Bibliothek, das ist der Grund für alle Funktionsnamen hier, alle Funktionen beginnen mit dem Präfix 'su'.

Es ist sehr einfach zu bedienen und sehr mächtig (und ziemlich weniger Code).

Hier ist der Code:

%Vor%

Einige Kontextfunktionen:

%Vor%

So verwenden Sie es:

In den folgenden Beispielen gehe ich davon aus, dass bereits Inhalt in eine Variable namens $sMyHtml geladen wurde und die Variable $sMyNewContent enthält etwas neues html. Die Variable $sMyHtml enthält ein Element namens / mit der ID ' example_id '.

%Vor%     
Codebeat 15.07.2013 18:17
quelle

Tags und Links