DOM und &
Volker Nebelung
- php
0 levu0 suit0 suit0 Christian Kruse0 suit
0 ChrisB
Aloha 'oe,
ich lese in PHP eine XML-Datei ein und will den Inhalt aller "control"-Elemente ausgeben:
$xml = new DOMDocument();
$xml->load("datei.xml");
foreach ($xml->getElementsByTagName("control") as $control) {
echo $control->nodeValue;
}
Mein Problem: Der Inhalt besteht unter anderem aus der Zeichenfolge "xxx&xxx", was allerdings im HTML-Code dann als "xxx&xxx" zu lesen ist.
Nun kann man natürlich nachträglich Zeichen per PHP wieder hinzufügen, aber mich interessiert, wo das Verfälschen des Ursprungtextes passiert und wie ich es verhindern kann?!
Gruß, Volker
Hallo,
DOM formt entitäten automatisch um.
Wenn du & haben willst musst du entweder & schreiben, oder danach eine funktion a la htmlspecialchars anwenden.
mfg, Flo
DOM formt entitäten automatisch um.
nein, er behandelt sie nur kontextgerecht - von umformen kann keine rede sein, der xml-parser liest & schlichtweg als amp
genauso wie beim url encoding - da steht auch in der adresszeile foo%26bar, im klartext heissts aber foo&bar
wenn ich im klartext foo%26bar brauche, muss ich diesen string kontextgerecht codieren/maskieren, dann würde halt foo%2526bar draus
der xml-parser liest & schlichtweg als amp
als ampersand (im klartext &)
wo bleibt eigentlich die edit-funktion? :D
你好 suit,
wo bleibt eigentlich die edit-funktion? :D
Die wird es (in der Standard-Distro) vom CForum nie geben :)
再见,
克里斯蒂安
Die wird es (in der Standard-Distro) vom CForum nie geben :)
das war ja auch eine rhetorische frage :p
Hi,
Mein Problem: Der Inhalt besteht unter anderem aus der Zeichenfolge "xxx&xxx", was allerdings im HTML-Code dann als "xxx&xxx" zu lesen ist.
Nun kann man natürlich nachträglich Zeichen per PHP wieder hinzufügen, aber mich interessiert, wo das Verfälschen des Ursprungtextes passiert
Es passiert *gar nicht*.
Wenn du in einem XML-Textknoten & notierst, dann *ist* der *Inhalt* dieses Textknotens an der Stelle ein &.
Von einer "Verfaelschung" kann also keine Rede sein.
MfG ChrisB
Aloha 'oe,
Wenn du in einem XML-Textknoten & notierst, dann *ist* der *Inhalt* dieses Textknotens an der Stelle ein &.
Von einer "Verfaelschung" kann also keine Rede sein.
Hm, ich hätte erwartet, dass im HTML-Quelltext auch ein & auftaucht, aber da lag ich wohl falsch ...
Danke, dann hilft wohl doch nur die nachträgliche Rekonstruktion des &.
Gruß, Volker
Hm, ich hätte erwartet, dass im HTML-Quelltext auch ein & auftaucht, aber da lag ich wohl falsch ...
das nennt sich kontextgerechtes maskieren der zeichen, in xml html ein & einfach als & maskiert zu sein, wenn du & als zeichenkette in einem xml-file unterbringen willst, musst du es als & maskieren
Danke, dann hilft wohl doch nur die nachträgliche Rekonstruktion des &.
htmlspecialchars()
echo $begrüßung;
Wenn du in einem XML-Textknoten & notierst, dann *ist* der *Inhalt* dieses Textknotens an der Stelle ein &.
Von einer "Verfaelschung" kann also keine Rede sein.
Hm, ich hätte erwartet, dass im HTML-Quelltext auch ein & auftaucht, aber da lag ich wohl falsch ...
Danke, dann hilft wohl doch nur die nachträgliche Rekonstruktion des &.
Nein, es ist keine Rekonstruktion sondern ein notwendiges Bearbeiten für einen neuen Kontext, HTML in deinem Fall. Es hätte aber auch jedes beliebige andere Medium mit völlig von XML/HTML verschiedenen Kodierungsregeln sein können. Ebenfalls ist es keineswegs prinzipiell so, dass die ursprünglich mit XML transprortierten Daten unverändert bleiben müssen. Du kannst sie kürzen oder ergänzen, auf alle Fälle brauchst du sie für die interne Verarbeitung idealerweise im Rohformat und wenn du sie an ein Medium ausgibst, kodierst du sie kontextgerecht.
echo "$verabschiedung $name";
Hi,
Hm, ich hätte erwartet, dass im HTML-Quelltext auch ein & auftaucht, aber da lag ich wohl falsch ...
Grundlage der Software-Entwicklung: Wenn Du einen Wert in einen Kontext bringst, musst Du ihn kontextspezifisch kodieren.
Gegenseite, mit der man sich nur sehr selten herumschlagen muss, weil sie fast immer automatisch passiert: Wenn Du einen Wert aus einem Kontext nimmst, musst Du ihn kontextspezifisch dekodieren. Genau dies passiert in den von Dir verwendeten DOM-Methoden. Und: Wenn Du die richtigen DOM-Methoden zur Ausgabe benutzt - echo zählt nicht dazu - dann passiert auch die Kodierung automatisch.
Cheatah