Discussion:
Umlaute in Urls
(zu alt für eine Antwort)
Dominic Griesel
2004-08-22 20:26:49 UTC
Permalink
Hallo,

auf meiner Seite zeige ich verschiedene Buttons an. Beim Klick auf einen
wird per Javascript eine Seite mit entsprechenden Parametern aufgerufen.
Nun können diese Parameter auch Umlaute oder Leerzeichen enthalten.

Muss ich diese mit Server.UrlEncode() codieren, bevor sie im Javascript-Code
erscheinen, oder regelt der Browser das selbst, wenn er eine Seite aufrufen
muss?

Ich meine nämlich, wenn der Browser so etwas findet:

<button onclick="location.href='test.aspx?param=das ist ein text mit
leerzeichen'">

dass im querystring sowas steht:

"test.aspx?param=das%20ist%20ein%20text%20mit%20leerzeichen"
--
Gruß
Dominic Griesel
Stefan Falz [MVP]
2004-08-22 20:33:26 UTC
Permalink
Hallo Dominic,
Post by Dominic Griesel
Muss ich diese mit Server.UrlEncode() codieren, bevor sie im Javascript-Code
erscheinen, oder regelt der Browser das selbst, wenn er eine Seite aufrufen
muss?
Du solltest es selbst erledigen. Auch wenn manche Browser das autom. machen
wirst du bei anderen Browsern auf Probleme stossen.
--
Tschau, Stefan
MS MVP für ASP / ASP.Net
http://aspnet.codebooks.de/ - Das ASP.Net Codebook (VB.Net)
http://asp.codebooks.de/ - Das ASP Codebook
http://www.aspfaq.de/ - Active Server Pages FAQ
Christoph Schneegans
2004-08-22 21:01:38 UTC
Permalink
Post by Dominic Griesel
Nun können diese Parameter auch Umlaute oder Leerzeichen enthalten.
Muss ich diese mit Server.UrlEncode() codieren, bevor sie im
Javascript-Code erscheinen, oder regelt der Browser das selbst,
wenn er eine Seite aufrufen muss?
URLs dürfen nur ASCII-Zeichen enthalten, und es ist nicht
spezifiziert, wie ein Browser Nicht-ASCII-Zeichen behandeln soll,
auch wenn die Empfehlung aus
<http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.2.1>, mit
UTF-8 zu codieren, eigentlich völlig intuitiv ist.

Bei IE und Opera kannst du sogar einstellen, ob die Eingabe von
"http://www.example.org/ä" in die Adreßzeile zu
<http://www.example.org/%C3%A4> oder <http://www.example.org/%E4>
umgesetzt werden soll.

Möglicherweise ist es sogar ratsam, nicht
"HttpServerUtility.UrlEncode(String)" zu verwenden, sondern
"HttpUtility.UrlEncode(String, Encoding)" und dann UTF-8 explizit
anzugeben; sonst ändern sich deine URLs, wenn sich die Codierung
deiner Seiten ändert.
--
<http://schneegans.de/> · MVP FrontPage |
Dominic Griesel
2004-08-23 07:54:40 UTC
Permalink
Hallo Christoph,
Post by Christoph Schneegans
Möglicherweise ist es sogar ratsam, nicht
"HttpServerUtility.UrlEncode(String)" zu verwenden, sondern
"HttpUtility.UrlEncode(String, Encoding)" und dann UTF-8 explizit
anzugeben; sonst ändern sich deine URLs, wenn sich die Codierung
deiner Seiten ändert.
Stimmt, das werde ich machen...
--
Gruß
Dominic Griesel
Pascal Schmitt
2004-08-23 12:09:29 UTC
Permalink
Hallo!

Und was ist mit Umlaut-Domains?
Wenn ich z.B. auf http://äöü.de/ (gibts echt...) verlinken möchte?
Muss man die Domain als Punycode angeben, oder reicht URL-Encoded?
--
Pascal Schmitt
http://cebra.nu/

There are two types of programming languages; the ones that people bitch
about and the ones that no one uses. (Bjarne Stroustrup)
Christoph Schneegans
2004-08-23 13:22:46 UTC
Permalink
Post by Pascal Schmitt
Und was ist mit Umlaut-Domains?
Wenn ich z.B. auf http://äöü.de/ (gibts echt...) verlinken möchte?
Muss man die Domain als Punycode angeben, oder reicht URL-Encoded?
Das reicht nicht nur nicht, %HH ist im Host-Teil einer URL gar nicht
erlaubt, vgl. <http://www.ietf.org/rfc/rfc2396.txt>:

hostname = *( domainlabel "." ) toplabel [ "." ]
domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum
toplabel = alpha | alpha *( alphanum | "-" ) alphanum

Was bei "http://%E4%F6%FC.de/" oder "http://%C3%A4%C3%B6%C3%BC.de"
passiert, dürfte also größtenteils Zufall sein. Ich würde auf jeden
Fall die Punycode-Notation verwenden, bspw. Opera 7.x ist ja
glücklicherweise schlau genug, nach dem Klick auf

<a href='http://xn--4ca0bs.de/'>

in der Adreßzeile "http://äöü.de/" anzuzeigen.

Bei IRIs ist das offenbar etwas anders, vgl.
<http://lists.w3.org/Archives/Public/uri/2004Mar/thread.html#49>.
--
<http://schneegans.de/> · MVP FrontPage |
Pascal Schmitt
2004-08-23 21:19:15 UTC
Permalink
Hallo!
Post by Christoph Schneegans
Post by Pascal Schmitt
Und was ist mit Umlaut-Domains?
Wenn ich z.B. auf http://äöü.de/ (gibts echt...) verlinken möchte?
Muss man die Domain als Punycode angeben, oder reicht URL-Encoded?
Das reicht nicht nur nicht, %HH ist im Host-Teil einer URL gar nicht
hostname = *( domainlabel "." ) toplabel [ "." ]
domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum
toplabel = alpha | alpha *( alphanum | "-" ) alphanum
Btw.: Bedeutet das "|" hier oder? Dann könnte es doch sogar
einbuchstabige Domains geben?!
Post by Christoph Schneegans
Was bei "http://%E4%F6%FC.de/" oder "http://%C3%A4%C3%B6%C3%BC.de"
passiert, dürfte also größtenteils Zufall sein.
Mit Mozilla z.B. gar nichts...
Post by Christoph Schneegans
Bei IRIs ist das offenbar etwas anders, vgl.
<http://lists.w3.org/Archives/Public/uri/2004Mar/thread.html#49>.
Aha, danke für die Informationen!
--
Pascal Schmitt
http://cebra.nu/

There are two types of programming languages; the ones that people bitch
about and the ones that no one uses. (Bjarne Stroustrup)
Christoph Schneegans
2004-08-23 21:42:01 UTC
Permalink
Post by Pascal Schmitt
%HH ist im Host-Teil einer URL gar nicht erlaubt, vgl.
hostname = *( domainlabel "." ) toplabel [ "." ]
domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum
toplabel = alpha | alpha *( alphanum | "-" ) alphanum
Btw.: Bedeutet das "|" hier oder? Dann könnte es doch sogar
einbuchstabige Domains geben?!
RFC 2396 betrifft URL-Syntax, nicht Domainregistrierung. Ich sehe
auch nicht, warum überhaupt zwischen "toplabel" und "domainlabel"
unterschieden wird, das braucht einen URL-Parser ja nicht zu
interessieren, und offensichtlich ist es kein Problem, auf
<http://-.kg/> zuzugreifen.
--
<http://schneegans.de/> · MVP FrontPage |
Pascal Schmitt
2004-08-28 14:14:56 UTC
Permalink
Hallo!
Post by Christoph Schneegans
Post by Pascal Schmitt
%HH ist im Host-Teil einer URL gar nicht erlaubt, vgl.
hostname = *( domainlabel "." ) toplabel [ "." ]
domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum
toplabel = alpha | alpha *( alphanum | "-" ) alphanum
Btw.: Bedeutet das "|" hier oder? Dann könnte es doch sogar
einbuchstabige Domains geben?!
RFC 2396 betrifft URL-Syntax, nicht Domainregistrierung. Ich sehe
auch nicht, warum überhaupt zwischen "toplabel" und "domainlabel"
unterschieden wird, das braucht einen URL-Parser ja nicht zu
interessieren,
hat wohl damals niemanden gestört...
Post by Christoph Schneegans
und offensichtlich ist es kein Problem, auf
<http://-.kg/> zuzugreifen.
interessant - und bei der deNIC kann man nicht mal fc.de registrieren...
--
Pascal Schmitt
http://cebra.nu/

There are two types of programming languages; the ones that people bitch
about and the ones that no one uses. (Bjarne Stroustrup)
Loading...