Matze: Umlaute in Adresse + Unterschied ä %E4

Guten Morgen an alle!

Vielleicht liegts auch an der Uhrzeit,
ich überleg mir gerade wie ich eine Variable
mit dem Inhalt "Gästebuch Forum" per GET am günstigsten übergebe.

Wenn ich die Variable genau so übergebe, übersetzt mir der Browser
(Firefox) das "ä" durch ein %E4, ein Leerzeichen durch %20.

Ich hab mich damit bislang nie beschäftigt,
weil ich es ganz einfach noch nie benutzt habe.

Wie übergeb ich den Inhalt also am besten, oder kann ich das,
auch für Landessprachen ohne Umlaute einfach so lassen?

Danke im vorraus!

Gruß, Matze

  1. echo $begrüßung;

    Wenn ich die Variable genau so übergebe, übersetzt mir der Browser
    (Firefox) das "ä" durch ein %E4, ein Leerzeichen durch %20.

    Für das ä macht er das, weil deine Seite die Kodierung ISO-8859-1 verwendet. Bei UTF-8 beispielsweise wäre es %C3%A4. Ob es für diese Zeichen eine Pflicht zur Kodierung gibt, weiß ich nicht. Doch der FF wird das nicht aus lauter Langeweile machen. Das mit dem Leerzeichen (und einigen anderen Zeichen muss so sein, denn diese haben in URLs eine Sonderbedeutung und müssen umkodiert werden.

    Diese URL-Kodierung stellt aber im Allgemeinen kein Problem dar. Oftmals dekodieren die empfangenden Systeme (z.B. PHP) diese Kodierung bereits bevor sie die Daten an das auszuführende Script/Programm weitergeben.

    Wie übergeb ich den Inhalt also am besten, oder kann ich das,
    auch für Landessprachen ohne Umlaute einfach so lassen?

    Verwende generell die für deine Programmierumgebung vorgesehene(n) Funktion(en) zur URL-gerechten Kodierung, wenn du Daten in den URL-Kontext bringst. Beachte auch, dass die URL danach auch nochmal HTML-gerecht kodiert werden muss, wenn sie in einen HTML-Kontext eingefügt wird.

    echo "$verabschiedung $name";

    1. Wenn ich die Variable genau so übergebe, übersetzt mir der Browser
      (Firefox) das "ä" durch ein %E4, ein Leerzeichen durch %20.

      Für das ä macht er das, weil deine Seite die Kodierung ISO-8859-1 verwendet. Bei UTF-8 beispielsweise wäre es %C3%A4. Ob es für diese Zeichen eine Pflicht zur Kodierung gibt, weiß ich nicht.

      RFC 1738 regelt das URL-Format. Dort heißt es in Abschnitt 2.2, "Octets must be encoded if they have no corresponding graphic character within the US-ASCII coded character set".

      Das mit dem Leerzeichen (und einigen anderen Zeichen muss so sein, denn diese haben in URLs eine Sonderbedeutung und müssen umkodiert werden.

      Das Leerzeichen hat per se in URLs keine Sonderbedeutung, es ist lediglich eine Fehlerquelle, weil a) der Anwender möglicherweise nicht genau weiß, wo die URL aufhört und b) aufeinanderfolgende Leerzeichen sich nur durch Hinsehen schlecht zählen lassen.

      Diese URL-Kodierung stellt aber im Allgemeinen kein Problem dar. Oftmals dekodieren die empfangenden Systeme (z.B. PHP) diese Kodierung bereits

      URLs kennen kein Mittel zu Übertragung des bei der Kodierung verwendeten Zeichensatzes, weshalb die Dekodierung auf empfangender Seite im Zweifelsfall ein reines Ratespiel werden kann. Auf eigenen Seiten hat man die automatische Kodierung zwar noch halbwegs unter Kontrolle, aber wenn eigene, gänzlich unkodierte URLs auf fremden Seiten angesprochen werden, kann das in die Hose gehen.

      Wie übergeb ich den Inhalt also am besten, oder kann ich das,
      auch für Landessprachen ohne Umlaute einfach so lassen?

      Es gibt zwei Möglichkeiten:

      Die hässliche, aber nicht immer vermeidbare Variante (Besuchereingaben) ist, schon beim Ausgeben der Seite die dort enthaltenen URLs nach dem %-Schema und mit dem intern verwendeten Zeichensatz zu kodieren.

      Bei festen URLs umgehe besser gleich Zeichen, die nicht in der US-ASCII-Tabelle drin sind. Es ist kein Beinbruch, wenn Du statt Gästebuch Gaestebuch schreibst (ganz im Gegensatz zur Verwendung von "Gästebuch Forum" statt "Gästebuch-Forum") und der überwiegende Teil der Besucher wird mit "Ueberbaerhuempelbach" weniger Probleme haben als mit "%DCberb%E4rh%FCmpelbach" oder "%C3%9Cberb%C3%A4rh%C3%BCmpelbach".

      1. Hallo!

        Danke für di Antworten. Alles verstanden und geklärt.
        Da es keine Benutzerübergebenen Variablen sind, kann ich sie schön vorformatieren.

        Gruß, Matze