unescaped & or unknown entity "&..."
WernerK
- php
1 dedlfix1 Der Martin
Hallo,
ich habe zum testen eine Datei mit Sonderzeichen angelegt:
Meine+test~datei@mit-üöß&.txt
Dies liegt in einem Verzeichnis (win7). Dieses lese ich mit PHP aus und zeige die Dateien in einer Auswahlliste (select) an.
Soweit ok.
Die Seite ist mit "utf8" codiert.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Im Select steht u.a. folgendes:
..
<option value="c:/test/Meine+test~datei@mit-üöß&.txt">Meine+test~datei@mit-üöß&.txt</option>
Mein HTML Tidy bringt nun obige Meldung und möchte das man "&" mit "&"
kodiert.
Für den angezeigten Namen könnte ich das machen. Nur was mache ich mit dem Value? Hier brauche ich den "echten" Namen so wie im Verzeichnis weil ich diese Datei event. weiterverarbeiten möchte?
Gruss
Werner
Hi!
Die Seite ist mit "utf8" codiert.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Das ist nur ein Hinweis für den Leseprozess, dass sie UTF-8-kodiert sei, keine Anweisung an irgendwen, sie als UTF-8 zu kodieren. Das heißt, wenn du diese Zeile als Beweis anführen wolltest, dann hat das nicht geklappt.
<option value="c:/test/Meine+test~datei@mit-üöß&.txt">Meine+test~datei@mit-üöß&.txt</option>
Mein HTML Tidy bringt nun obige Meldung und möchte das man "&" mit "&" kodiert.
Recht hat es. Kontextwechsel beachten - in dem Fall die Sonderzeichen von HTML.
Für den angezeigten Namen könnte ich das machen. Nur was mache ich mit dem Value? Hier brauche ich den "echten" Namen so wie im Verzeichnis weil ich diese Datei event. weiterverarbeiten möchte?
Der Browser weiß, dass er die HTML-Kodierung beim Lesen zu dekodieren hat. Er weiß auch, wie er den Wert beim Versenden über HTTP (GET oder POST) so zu kodieren hat, dass der Webserver ihn korrekt dekodieren kann. Probier es doch einfach aus, was bei dir im Script ankommt.
Lo!
Hi,
<option value="c:/test/Meine+test~datei@mit-üöß&.txt">Meine+test~datei@mit-üöß&.txt</option>
Mein HTML Tidy bringt nun obige Meldung und möchte das man "&" mit "&" kodiert.
ja, völlig richtig - und das ist keine "möchte"-Regelung, sondern das *muss* sein, auch wenn die meisten Browser wohl großzügig darüber hinwegsehen: Wenn die nach dem '&' folgenden Zeichen keine gültige Entity-Referenz ergeben, nehmen sie das '&' eben wörtlich. Korrekt ist es trotzdem nicht.
Für den angezeigten Namen könnte ich das machen. Nur was mache ich mit dem Value?
Genau dasselbe.
Hier brauche ich den "echten" Namen so wie im Verzeichnis weil ich diese Datei event. weiterverarbeiten möchte?
Ja und? In dem Moment, wo der Browser den Quellcode interpretiert, werden diese Entity-Referenzen aufgelöst. Der interne, interpretierte Code enthält daher wieder das Symbol '&' im Klartext. Dabei ist es egal, ob du mit Javascript darauf zugreifst, oder diesen String als value eines Formularelements wieder versendest.
Ciao,
Martin