location und punycode
gero
- javascript
0 Mega0 Sven Rautenberg
Hallo,
um die aktuelle URL auszlesen nutze ich
var url = location.href;
Leider funktioniert das bei IDN-Domains nicht ganz sauber. Beispielsweise bei bäcker.der wird auch bäcker.de übernommen. Für eine saubere Verarbeitung wäre aber richtig xn--bcker-gra.de . Da die Domain quasi als Link mit Parametern weiterverarbeitet wird http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#encode_uri_component@title=(Link), sieht zur Zeit der Codeauszug wie folgt aus:
encodeURIComponent(location.href);
Welche Möglichkeiten/Alternativen habe ich in diesem Fall?
Vielen Dank...
Welche Möglichkeiten/Alternativen habe ich in diesem Fall?
Du kannst über eine Tabelle die URL in Punycode umwandeln. Ob es so eine Tabelle in Javascript fertig gibt, weiss ich nicht, in PHP gibt es sowas bereits.
Moin!
um die aktuelle URL auszlesen nutze ich
var url = location.href;
>
> Leider funktioniert das bei IDN-Domains nicht ganz sauber. Beispielsweise bei bäcker.der wird auch bäcker.de übernommen.
Das ist aus meiner Sicht auch vollkommen korrekt so. Clientseitig werden die tatsächlichen Umlaute in der URL verwendet. Erst wenn der Client die Domain per DNS auflöst, wird sie in Punycode gewandelt und so auch im HTTP-"Host"-Header benutzt.
Javascript arbeitet aber nicht auf dieser fortgeschrittenen Ebene, sondern hat sich mit den Umlauten etc. auseinanderzusetzen.
> Für eine saubere Verarbeitung wäre aber richtig xn--bcker-gra.de .
Das hängt doch aber sehr von der Definition von "sauber" ab.
> Da die Domain quasi als Link mit Parametern weiterverarbeitet wird <http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#encode_uri_component@title=(Link)>, sieht zur Zeit der Codeauszug wie folgt aus:
>
> encodeURIComponent(location.href);
>
> Welche Möglichkeiten/Alternativen habe ich in diesem Fall?
Ich kann das Problem nicht erkennen. Kannst du nochmal etwas umfassender beschreiben, worüber du stolperst.
- Sven Rautenberg
--
"Love your nation - respect the others."
Moin!
Ich kann das Problem nicht erkennen. Kannst du nochmal etwas umfassender beschreiben, worüber du stolperst.
- Sven Rautenberg
Ja, ich nutze gern Bookmarkdienste.
Folgender Code wird bspw. von seitzeichen.de zur Verfügung gestellt:
<!-- Seitzeichen -->
<script type="text/javascript">var szu=encodeURIComponent(location.href); var szt=encodeURIComponent(document.title).replace(/\'/g,'`'); var szjsh=(window.location.protocol == 'https:'?'https://ssl.seitzeichen.de/':'http://w3.seitzeichen.de/'); document.write(unescape("%3Cscript src='" + szjsh + "w/f0/a3/widget_f0a3efeab1768cbe26e782f4d16eed19.js' type='text/javascript'%3E%3C/script%3E"));</script>
<!-- Seitzeichen --></div>
Sinn des Ganzen ist die Übertragung der URL mit einigen zusätzlich Angaben an Bookmarkingdienste. Bei Nutzung des Codes kommt dort aber der bäcker.de an. Sauber wäre aber der Punycode, weil es ebeb noch einige Browser gibt, die bäcker.de nicht unterstützen.
Andersrum ist es auch so, das einige Bookmarkingdienste Punycode nicht unterstützen, aber darum gehts hier nicht ;)
Grüße
Moin!
Ich kann das Problem nicht erkennen. Kannst du nochmal etwas umfassender beschreiben, worüber du stolperst.
Ja, ich nutze gern Bookmarkdienste.
Ja und?
Sinn des Ganzen ist die Übertragung der URL mit einigen zusätzlich Angaben an Bookmarkingdienste. Bei Nutzung des Codes kommt dort aber der bäcker.de an. Sauber wäre aber der Punycode, weil es ebeb noch einige Browser gibt, die bäcker.de nicht unterstützen.
Das ist eben die Frage: Wie definiert man "sauber"?
Inkompatible Browser gibt es noch genau einen: Der IE6 hat ein inkompatibles Umlautdomainverfahren implementiert, welches man ihm mit einem Plugin sogar abgewöhnen könnte. Alle anderen Browser können mit Umlautdomains umgehen.
Trotzdem haben sich Umlautdomains in Deutschland so gut wie nicht durchgesetzt. Die wurden zum Start alle massenhaft registriert - als Doppelbelegung zu analogen Domains ohne Umlaute - aber nie wirklich aktiv beworben, weil der IE6 damit eben nichts anfangen kann.
Aber davon mal weg: Wenn ich mir einen Bookmarkservice vorstelle, dann liegt auf der Hand, dass der die clientseitige Sicht auf URLs verwalten soll. Solche URLs sind immer die, die der Benutzer eintippt - also mit Umlaut, nicht im Punycode. Die gehören in dieser Form auch so in die HTML-Seiten. Deshalb ist meine Definition von "sauber" halt "mit Umlauten".
Wäre es für Javascript relevant, Domains mit Umlauten in Punycode zu wandeln, gäbe es dafür mit Sicherheit eine direkte Implementierung in irgendeinem DOM, z.B. als "location.idnhost". Gibts aber nicht.
Andersrum ist es auch so, das einige Bookmarkingdienste Punycode nicht unterstützen, aber darum gehts hier nicht ;)
Das hingegen würde mich sehr wundern, denn Punycode ist das, was das DNS direkt verarbeiten kann - da darf keine Datenkontrolle dran scheitern: "xn-abcdef-qua4k.invalid" enthält ja nur DNS-erlaubte Zeichen.
- Sven Rautenberg