Der Martin: Leerzeichen in URL bei XHTML

Beitrag lesen

Hallo Michael,

Quellcode: <a href=" http://www.leer zeichen.org">Page</a>
--> XML-Processor
--> Lexical space: <a href="http://www.leer%20zeichen.org">Page</a>
--> XML Validierung

ich bin a) selbst nicht ganz sattelfest bei der Frage und b) nicht sicher, dass ich dein Anliegen überhaupt richtig verstehe. Ich vermute aber, dass du auf dem Holzweg bist. Lassen wir das Entfernen von führendem Whitespace mal außen vor - ein XML-Parser wird aber sicher keine Ersetzung von Blanks zu %20 vornehmen.

Mein Verständnis basiert auf der Überlegung, dass XML attribute zuerst "normalisiert" werden durch den XML-Prozessor. Und danach erfolgt die Validierung.

Definiere "normalisiert". Weder in XML, noch in HTML unterliegen Attributwerte irgendwelchen Syntaxregeln - außer dass Sonderzeichen maskiert werden müssen. Die korrekte Maskierung ist aber hier z.B. &lt; oder &quot;, die Prozent-Codierung ist eine ganz andere Baustelle. Zudem gelten Blanks innerhalb von Attributwerten nicht als Sonderzeichen, die maskiert werden müssten.

Deshalb meine Frage, wäre der oben aufgeführte Quellcode XHTML valide (gibt es Unterschiede zwischen XHTML1.1 und (X)HTML5 hierbei?

Ja, er wäre auch in jedem HTML-Dialekt valide. Die Syntaxregeln von HTML und XML gelten nicht in Attributwerten. Die sind sozusagen Freiwild.

Ist mein Verständnis korrekt, dass der lexical space der obigen Darstellung entspricht, d.h. leading und trailing whitespaces entfernt und alle anderen whitespaces normalized?

Nein, in Attributwerten findet auch keine Whitespace-Normalisierung statt (du denkst an die Reduktion von mehreren Blanks zu einem einzigen, nehme ich an).

Was du hier ansprichst, ist eine ganz andere Baustelle. Nämlich die kontextgerechte Maskierung eines Attributwerts in dem Moment, wo er als URL interpretiert wird. Das passiert aber nicht bei der Validierung von XML oder HTML, sondern erst beim Generieren des HTML-DOM.

Live long and pros healthy,
 Martin

--
Wer respektiert werden will, sollte zunächst damit anfangen, andere zu respektieren.