Encoder: URL und encodeURI

Hallo, ich hätt hier was womit ich nicht weiterkomme.

Ein Formular lässt einen Link einfügen, der zum Server übergeben und auch wieder irgendwo ausgegeben wird. Die URL dieses Links wird bisher mit encodeURI (clientseitig -> Javascript) aufbereitet.
Das funktioniert auch bestens, example.de/T%e4st wird richtig aufgerufen und der Browser macht example.de/Täst draus.
Wenn das ä allerdings in der Domain steht, macht er das nicht. Da heißts dann die Domain ...%e4... kann nicht gefunden werden. Warum ist das so?
Wie müsste man hier richtig vorgehen?

  1. Hallo,

    Wenn das ä allerdings in der Domain steht, macht er das nicht. Da heißts dann die Domain ...%e4... kann nicht gefunden werden.

    Weil für Hostnamen in URLs eine andere Kodierungsvorschrift gilt, als für den Path-Teil in URLs. Für Domainnamen gilt Punycode, das ist etwas komplizierter.

    Jetzt fragst du wahrscheinlich: »Und wie kann ich Punycode erzeugen?« Dann frage ich: Warum kodierst du die URL überhaupt? Nimm sie einfach so, wie sie eingegeben wurde (nach entsprechenden Sicherheitschecks und HTML-Escaping). Es ist m.W. kein Problem, im HTML <a href="http://bäh.de/bäh"> zu schreiben. Der Browser macht automatisch http://xn--bh-via.de/b%C3%A4h daraus.

    Mathias

    1. Warum kodierst du die URL überhaupt?

      Um "böse" Zeichen zu neutralisieren. Aber dann muss ich mir wohl was anderes überlegen und selber ein bisschen replacen. War auf der Suche ob es dafür auch was brauchbares gibt, aber eine simple Funktion gibts scheinbar nicht.

      1. Um "böse" Zeichen zu neutralisieren.

        Was sind denn »böse« Zeichen?

        Bei der Ausgabe muss ein beliebiger, vom Benutzer eingegebene String sicher in den HTML-Kontext (HTML-Attributwert) überführt werden. Das ist alles.

        Das gilt bekanntlich für alle Eingaben.

        War auf der Suche ob es dafür auch was brauchbares gibt, aber eine simple Funktion gibts scheinbar nicht.

        Jede serverseitige Programmiersprache bzw. jedes serverseitige Webframework bietet geeignete Funktionen. Bei PHP z.B. htmlspecialchars oder ausgereifte Templating-Bibliotheken.

        Es ist nicht die Aufgabe von JavaScript, vom User eingegebene Strings, die zum Server geschickt werden, für eine zukünftige Ausgabe vorzubereiten. Das ist immer Aufgabe des Systems, die eine Ausgabe erzeugt (z.B. HTML-Code).

        GRüße
        Mathias

        1. Der Text wird serverseitig schon noch für die Ausgabe "zubereitet".
          Diese Funktion zum Link einfügen ist nur was zusätzliches. Ich hatte damit ein Problem mit URL Parametern, die als reines HTML eigentlich harmlos sind aber im Link wurden die durch den Browser nicht so umgesetzt wie sie aus der Adresszeile herauskopiert wurden.
          Das hatte mit % Zeichen zu tun. Ich muss damit nochmal ein bisschen experimentieren.

    2. @@molily:

      nuqneH

      Weil für Hostnamen in URLs eine andere Kodierungsvorschrift gilt, als für den Path-Teil in URLs. Für Domainnamen gilt Punycode, das ist etwas komplizierter.

      s.a. Einführung in multilinguale Webadressen

      Qapla'

      --
      „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)