XHTML, Links mit mehreren Variablen
Bernhard Gräuler
- sonstiges
Hallo an alle!
Ich bin gerade dabei, meine Seite so umzustricken, daß sie vom Validator vom W3C (http://validator.w3c.org) nicht mehr bemeckert wird. Ich will dass meine Seite XHTML 1.0 konform wird.
Komischerweise stellt sich der XHTML Validator bei Links mit mehreren Variablen quer.
Bei einem Link wie z.B.
<a href="onesite.php?var1=abc&var2=cde&var3=efg">
Link zu einer Seite mit 3 Variablen
</a>
schmeißt (wirft) mir der Validator vor:
<a href="onesite.php?var1=abc&var2=cde&var3=efg">
^
Error: reference not terminated by refc delimiter
<a href="onesite.php?var1=abc&var2=cde&var3=efg">
^
Error: reference not terminated by refc delimiter
Bedeutet das, ich kann ab jetzt nur noch eine Variable pro Link an ein Skript übergeben? Das ist doch Unsinn, oder? Hat hier jemand die XHTML Spezifikation im Kopf und kann mir erklären, warum das so ist?
Als einzige Lösung fällt mir im Moment nur ein, die Werte der Variablen durch eine Raute oder so getrennt an den Link zu hängen, also
<a href="onesite.php?var=abc#cde#efg">
...
Hab ich noch nicht getestet, sollte aber möglich sein. Ist aber völlig abwegig, da das niemand so macht, nur weil die Spezifikation so was möglicherweise vorschreibt. Außerdem ist das schlampig, weil die Variable erst wieder geparst werden muß, und sobald man etwas ändert und eine weitere Variable übergeben muß muß de Parser angepasst werden. Bei größeren Skripten, oder vielen Varablen pro Link ein Aufwand, der sich nur für XHTML Konformität meines Erachtens nicht lohnt.
Gibts für dieses Problem eine Lösung? Wenn ja, welche?
Vielen Dank schon mal
Bernhard
Hallo an alle!
Ich bin gerade dabei, meine Seite so umzustricken, daß sie vom Validator vom W3C (http://validator.w3c.org) nicht mehr bemeckert wird. Ich will dass meine Seite XHTML 1.0 konform wird.
Komischerweise stellt sich der XHTML Validator bei Links mit mehreren Variablen quer.
Bei einem Link wie z.B.
<a href="onesite.php?var1=abc&var2=cde&var3=efg">
Link zu einer Seite mit 3 Variablen
</a>
schmeißt (wirft) mir der Validator vor:
<a href="onesite.php?var1=abc&var2=cde&var3=efg">
^
Error: reference not terminated by refc delimiter
<a href="onesite.php?var1=abc&var2=cde&var3=efg">
^
Error: reference not terminated by refc delimiter
Bedeutet das, ich kann ab jetzt nur noch eine Variable pro Link an ein Skript übergeben? Das ist doch Unsinn, oder? Hat hier jemand die XHTML Spezifikation im Kopf und kann mir erklären, warum das so ist?
Als einzige Lösung fällt mir im Moment nur ein, die Werte der Variablen durch eine Raute oder so getrennt an den Link zu hängen, also
<a href="onesite.php?var=abc#cde#efg">
...
Hab ich noch nicht getestet, sollte aber möglich sein. Ist aber völlig abwegig, da das niemand so macht, nur weil die Spezifikation so was möglicherweise vorschreibt. Außerdem ist das schlampig, weil die Variable erst wieder geparst werden muß, und sobald man etwas ändert und eine weitere Variable übergeben muß muß de Parser angepasst werden. Bei größeren Skripten, oder vielen Varablen pro Link ein Aufwand, der sich nur für XHTML Konformität meines Erachtens nicht lohnt.
Gibts für dieses Problem eine Lösung? Wenn ja, welche?
Die Verwendung der oben genannten Variante mit den Raute-Zeichen (#). Ich hab die RFC2141 jetzt nicht im Kopf, dort ist aber das Aussehen der URI festgelegt. Die DTDs von XHTML sehen für das Element A eine Attribut href vom Typ URI vor, der in o.g. RFC festgelegt wird.
Wenn Du das ganze an ein PHP-Script schickst dürfte es aber kein Parser-Problem geben: GET-String einfach anhand des #-Zeichen Trennen lassen und durch das ganze Array durchlaufen.
Viele Grüße
Thomas
Die Verwendung der oben genannten Variante mit den Raute-Zeichen (#). Ich hab die RFC2141 jetzt nicht im Kopf, dort ist aber das Aussehen der URI festgelegt. Die DTDs von XHTML sehen für das Element A eine Attribut href vom Typ URI vor, der in o.g. RFC festgelegt wird.
Wenn Du das ganze an ein PHP-Script schickst dürfte es aber kein Parser-Problem geben: GET-String einfach anhand des #-Zeichen Trennen lassen und durch das ganze Array durchlaufen.
Kurze Ergänzung:
Zitat von http://www.ietf.org/rfc/rfc2141.txt:
"2.4 Excluded characters
The following list is included only for the sake of completeness.
Any octets/characters on this list are explicitly NOT part of the URN
character set, and if used in an URN, MUST be %encoded:
<excluded> ::= octets 1-32 (1-20 hex) | "" | """ | "&" | "<"
| ">" | "[" | "]" | "^" | "`" | "{" | "|" | "}" | "~" | octets 127-255 (7F-FF hex)"
D.h., das &-Zeichen ist explizit verboten. Ein Encoding als %26 bringt jedoch keine erwünschte Wirkung.
Auf das #-Zeichen solltest Du besser verzichten - der Rest der Parameter wird nicht gelesen.
Ein Link sollte also eher so aussehen:
<a href="script.php?parameter=var1%3dinhalt1%26var2%3dinhalt2">txt</a>
parameter enthält dann den String var1=inhalt1&var2=inhalt2, was wieder in einer allgemeinen Function geparst werden kann.
Thomas
Moin!
Die Verwendung der oben genannten Variante mit den Raute-Zeichen (#). Ich hab die RFC2141 jetzt nicht im Kopf, dort ist aber das Aussehen der URI festgelegt. Die DTDs von XHTML sehen für das Element A eine Attribut href vom Typ URI vor, der in o.g. RFC festgelegt wird.
Ich denke, du erzählst hier Unsinn. Die Raute ich (IMHO auch noch im XHTML) bei Links als Sprungziel für Anker vorgesehen. Die kannst du nicht einfach umwidmen in ein Trennzeichen für URL-Parameter.
Abgesehen davon definiert RFC 2141 das Aussehen einer URN, nicht einer URI. Die wird in RFC2396 festgelegt.
Kurze Ergänzung:
Zitat von http://www.ietf.org/rfc/rfc2141.txt:
"2.4 Excluded characters
The following list is included only for the sake of completeness.
Any octets/characters on this list are explicitly NOT part of the URN
character set, and if used in an URN, MUST be %encoded:
<excluded> ::= octets 1-32 (1-20 hex) | "" | """ | "&" | "<"
| ">" | "[" | "]" | "^" | "`" | "{" | "|" | "}" | "~" | octets 127-255 (7F-FF hex)"
D.h., das &-Zeichen ist explizit verboten. Ein Encoding als %26 bringt jedoch keine erwünschte Wirkung.
Das &-Zeichen ist als Wert eines Parameterstrings explizit verboten, weil es das Trennzeichen der Parameter ist. Wenn du die Variable namens "gmbh&co" übergeben willst, muß diese "gmbh%3dco" heißen. Gleiches gilt, wenn der Wert einer Variablen ein &-Zeichen enthält.
Zitat RFC 2396: http://www.ietf.org/rfc/rfc2396.txt
2.2. Reserved Characters
Many URI include components consisting of or delimited by, certain
special characters. These characters are called "reserved", since
their usage within the URI component is limited to their reserved
purpose. If the data for a URI component would conflict with the
reserved purpose, then the conflicting data must be escaped before
forming the URI.
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
"$" | ","
The "reserved" syntax class above refers to those characters that are
allowed within a URI, but which may not be allowed within a
particular component of the generic URI syntax; they are used as
delimiters of the components described in Section 3.
3.4. Query Component
The query component is a string of information to be interpreted by
the resource.
query = *uric
Within a query component, the characters ";", "/", "?", ":", "@",
"&", "=", "+", ",", and "$" are reserved.
Und schließlich schreibt das W3 selbst in http://www.w3.org/TR/2000/REC-xhtml1-20000126/#guidelines:
C.12 Using Ampersands in Attribute Values
When an attribute value contains an ampersand, it must be expressed as a character entity reference (e.g. "&"). For example, when the href attribute of the a element refers to a CGI script that takes parameters, it must be expressed as http://my.site.dom/cgi-bin/ myscript.pl?class=guest&name=user rather than as http://my.site.dom/cgi- bin/myscript.pl?class=guest&name=user.
- Sven Rautenberg
Moin!
Die Verwendung der oben genannten Variante mit den Raute-Zeichen (#). Ich hab die RFC2141 jetzt nicht im Kopf, dort ist aber das Aussehen der URI festgelegt. Die DTDs von XHTML sehen für das Element A eine Attribut href vom Typ URI vor, der in o.g. RFC festgelegt wird.
Ich denke, du erzählst hier Unsinn. Die Raute ich (IMHO auch noch im XHTML) bei Links als Sprungziel für Anker vorgesehen. Die kannst du nicht einfach umwidmen in ein Trennzeichen für URL-Parameter.
Abgesehen davon definiert RFC 2141 das Aussehen einer URN, nicht einer URI. Die wird in RFC2396 festgelegt.
Kurze Ergänzung:
Zitat von http://www.ietf.org/rfc/rfc2141.txt:
"2.4 Excluded characters
The following list is included only for the sake of completeness.
Any octets/characters on this list are explicitly NOT part of the URN
character set, and if used in an URN, MUST be %encoded:
<excluded> ::= octets 1-32 (1-20 hex) | "" | """ | "&" | "<"
| ">" | "[" | "]" | "^" | "`" | "{" | "|" | "}" | "~" | octets 127-255 (7F-FF hex)"
D.h., das &-Zeichen ist explizit verboten. Ein Encoding als %26 bringt jedoch keine erwünschte Wirkung.
Das &-Zeichen ist als Wert eines Parameterstrings explizit verboten, weil es das Trennzeichen der Parameter ist. Wenn du die Variable namens "gmbh&co" übergeben willst, muß diese "gmbh%3dco" heißen. Gleiches gilt, wenn der Wert einer Variablen ein &-Zeichen enthält.
Zitat RFC 2396: http://www.ietf.org/rfc/rfc2396.txt
2.2. Reserved Characters
Many URI include components consisting of or delimited by, certain
special characters. These characters are called "reserved", since
their usage within the URI component is limited to their reserved
purpose. If the data for a URI component would conflict with the
reserved purpose, then the conflicting data must be escaped before
forming the URI.
reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
"$" | ","
The "reserved" syntax class above refers to those characters that are
allowed within a URI, but which may not be allowed within a
particular component of the generic URI syntax; they are used as
delimiters of the components described in Section 3.
3.4. Query Component
The query component is a string of information to be interpreted by
the resource.
query = *uric
Within a query component, the characters ";", "/", "?", ":", "@",
"&", "=", "+", ",", and "$" are reserved.
Und schließlich schreibt das W3 selbst in http://www.w3.org/TR/2000/REC-xhtml1-20000126/#guidelines:
C.12 Using Ampersands in Attribute Values
When an attribute value contains an ampersand, it must be expressed as a character entity reference (e.g. "&"). For example, when the href attribute of the a element refers to a CGI script that takes parameters, it must be expressed as http://my.site.dom/cgi-bin/ myscript.pl?class=guest&name=user rather than as http://my.site.dom/cgi- bin/myscript.pl?class=guest&name=user.
- Sven Rautenberg
OK, Ok, OK, ich ziehe alles zurück :-( Du hast ja sowas von Recht... Korrektes Quellenfinden ist halt doch nicht immer so einfach. Also nochmals Danke & ein schönes WE
Thomas
Hallo an alle!
Moin an dich!
Komischerweise stellt sich der XHTML Validator bei Links mit mehreren Variablen quer.
Bei einem Link wie z.B.
<a href="onesite.php?var1=abc&var2=cde&var3=efg">
Link zu einer Seite mit 3 Variablen
</a>
schmeißt (wirft) mir der Validator vor:
<a href="onesite.php?var1=abc&var2=cde&var3=efg">
^
Error: reference not terminated by refc delimiter
<a href="onesite.php?var1=abc&var2=cde&var3=efg">
^
Error: reference not terminated by refc delimiter
Überleg mal selbst: Wie schreibt man in HTML ein &-Zeichen?
Richtig, das heißt &. Auch in Links.
- Sven Rautenberg
Hallo an alle!
Moin an dich!
Komischerweise stellt sich der XHTML Validator bei Links mit mehreren Variablen quer.
Bei einem Link wie z.B.
<a href="onesite.php?var1=abc&var2=cde&var3=efg">
Link zu einer Seite mit 3 Variablen
</a>
Überleg mal selbst: Wie schreibt man in HTML ein &-Zeichen?
Richtig, das heißt &. Auch in Links.
- Sven Rautenberg
Danke für den Hinweis - auch wenn es lt. Spezifikation definitiv nicht funktionieren dürfte.
Schönes WE
Thomas
Moin!
Danke für den Hinweis - auch wenn es lt. Spezifikation definitiv nicht funktionieren dürfte.
Du wirst sicherlich gleich </?m=19711&t=3453> lesen und verstehen, was bei deiner Überlegung falsch ist... :)
Schönes WE
Wünsch ich auch!
- Sven Rautenberg
Danke Sven und Danke Thomas!
Ich sollte mich Samstag morgens nicht mit solch komplexer Materie beschäftigen ;-)
Hätte ich wirklich auch selber drauf kommen können.
Viele Grüße und ein schönes Wochenende wünscht
Bernhard