& in URL's macht Probleme

Im Firefox klappts - im Internet Explorer nicht - die Lösung hier

Wer versucht seinen Quellcode XHTML 1.1 konform zu gestalten, muss sich auf einige Fallstricke gefasst machen. Das Ergebnis ist aber ein sauberer, aufgeräumter Code, der jedem Spider das Leben einfacher macht. Doch die Tücke steckt oft im Detail. Zum Beispiel, wenn man per Javascript URLs mit Sonderzeichen verarbeitet. Ein besonderes Problem stellt hier das kaufmännische UND dar: Nach dem HTML-Standard muss jedes &, auch das in Webadressen, mit & amp; maskiert sein (ohne Leerzeichen).

falsch:
CODE
<a href="http://domain.example/datei.php?foo=true&foo2=true">Lalala</a>

richtig:
CODE
<a href="http://domain.example/datei.php?foo=true& amp;foo2=true">Lalala</a>


Die derzeit strikteste HTML-Version is XHTML 1.1 - hier wird kein Fehler verziehen. Der Browser bricht bei falschem HTML-Syntax das gesamte Parsing der Website ab und liefert eine entsprechend Fehlermeldung. Im Firefox zum Beispiel die folgende:
CODE
XML-Verarbeitungsfehler: nicht wohlgeformt
        Adresse: ...
        Zeile Nr. 105, Spalte 2:&
        -^


Doch nicht immer ist die oben genannte Maskierung die richtige. Denn spätestens wenn Javascript eingesetzt wird, muss nach RFC 1738 maskiert werden - sonst streikt der Internet Explorer. In Javascript geschieht dies via escape und unescape. Im HTML-Quelltext müssen die Sonderzeichen in der URL jedoch immer maskiert sein. Dies kann man automatisiert serverseitig machen, zum Beispiel mit den PHP-Pendants urlencode und urldecode.

CODE
<?php echo '<a href="http://domain.example/',urlencode('datei.php?foo=true&foo2=true'),'">Lalala</a>'; ?>


Die korrekte HTML-Ausgabe wäre die folgende:
CODE
<a href="http://domain.example/datei.php%3Ffoo%3Dtrue%26foo2%3Dtrue">Lalala</a>


Damit lässt sich fehlerfrei und syntaktisch korrekt in Javascript arbeiten. Jedoch lässt sich diese Adresse noch nicht als URL verwenden, da der Browser diese nicht interpretieren kann. Wird die Adresse also per Javascript an den Browser gesendet, muss sie vorher noch unescaped werden:

CODE
<script type="text/javascript">window.location.href(unescape('<a href="http://domain.example/datei.php%3Ffoo%3Dtrue%26foo2%3Dtrue">Lalala</a>'));</script>


Hat man diesen kleinen Umweg einmal verinnerlicht, lässt sich damit sehr gut syntaxkonform arbeiten.

Antwort hinzufügen

Dein Name:

bold italic underlined line-through insert-url insert-image quote code indent align-left align-right align-center align-justify insert-email spoiler BBCode Hilfe

editor-maximize editor-minimize mark manage-attachments clear-textarea process-stop

Smileys deaktivieren?

Spam Protection

Sie sind nicht eingeloggt.