zut: Sonderzeichen/Umlaute in Querys?

Hihallo.

Ich übergebe Querys, die ich dann als Text auf der Seite darstelle. Manchmal ist auch ein ä oder so drin. Wenn ich ä in den Query schreibe, dann wird auch ä ausgegeben. Wenn ich ä in den Query schreibe, dann wird ä ausgegeben.

Woran liegt das? Und wie kann ich das einheitlich machen, manche rechner (vor allem ausländische) kennen die deutschen umlaute nicht?

euer zut

  1. Habe gerade festgestellt, dass nur Opera diesen Fehler macht, alle anderen meiner Browser machen alles fehlerfrei - und auch - oh Wunder - der Internet Explorer :)

    Aber der Opera Browser macht noch etwas: wenn ich mit der Maus auf den Link gehe, dann zeigt er mir alle Leerzeichen im Query als %20 und das "ä" wird zu "%C3%A4". Ist das ein Bug des Opera?

    1. Ich übergebe Querys, die ich dann als Text auf der Seite darstelle. Manchmal ist auch ein ä oder so drin. Wenn ich ä in den Query schreibe, dann wird auch ä ausgegeben. Wenn ich ä in den Query schreibe, dann wird ä ausgegeben.

      Woran liegt das?

      Keine Ahnung, was Du mit Query meinst, aber offensichtlich wird das ä in sein utf-8-Äquivalent ä umgewandelt, was dann wegen falscher Kodierungsangabe als ä erscheint (in utf-8 besteht das ä aus zwei Bytes).

      Und wie kann ich das einheitlich machen, manche rechner (vor allem ausländische) kennen die deutschen umlaute nicht?

      Unicode verwenden.

      Habe gerade festgestellt, dass nur Opera diesen Fehler macht

      So sicher wäre ich mir nicht, dass das ein Fehler ist.

      Aber der Opera Browser macht noch etwas: wenn ich mit der Maus auf den Link gehe, dann zeigt er mir alle Leerzeichen im Query als %20 und das "ä" wird zu "%C3%A4".

      %C3%A4 bedeutet zwei Bytes mit den Werten C3 (dezimal 195) und A4 (164), deren Werte in der Kodierung iso-8859-1 die Zeichen à und ¤ darstellen. In utf-8 sind diese zwei Bytes zusammen das Zeichen ä.
      20 (dezimal 32) ist das Leerzeichen in ASCII und damit auch in den meisten anderen Kodierungen, inklusive iso-8859-1 und utf-8.

      In URLs sind nur bestimmte Zeichen erlaubt, die deutschen Umlaute und das Leerzeichen gehören standardmäßig nicht dazu. Von diesem Standpunkt gesehen ist alles, was Opera macht, der Versuch, Deine vermurksten URLs in das für solche Fälle vorgesehene Korsett zu pressen. Da dieses Korsett zwar die Übermittlung nicht erlaubter Bytewerte definiert (als "%" + Hexdarstellung des Bytewertes), aber nicht, welche Zeichenkodierung angewendet werden soll, um den dem ä entsprechenden Bytewert festzustellen, läuft es bei Opera anscheinend etwas anders als bei anderen Browsern.

      Wie sich Dein Problem nun beheben lässt, ist ohne Kenntnis der Umstände (URL und Code der Seite) nicht zu sagen.

      1. Hallo,

        Habe gerade festgestellt, dass nur Opera diesen Fehler macht

        So sicher wäre ich mir nicht, dass das ein Fehler ist.

        Es ist immerhin inkonsequent.

        <a href="-ä-&auml;-">
        wird in einem ISO-8859-1-kodierten Dokument zu
        -%E4-%C3%A4- (der besagte Widerspruch)
        in einem UTF-8-kodierten Dokument zu
        -%C3%A4-%C3%A4- (stimmig)

        Dies jeweils, wenn »Encode international Web addresses with UTF-8« aktiviert ist.
        Wenn dies nicht aktiviert ist:
        ISO-8859-1: -%E4-%E4- (stimmig)
        UTF-8: -%C3%A4-%E4- (ein ähnlicher Widerspruch, diesmal anders herum)

        Das ist wirklich wirr.

        Jeweils getestet mit Opera 7.54.

        Abhilfe wie gesagt: Direkt korrekte UTF-8-kodierte Adressen im Quelltext ohne »ä«, »&auml;« und Co. notieren.

        Mathias

      2. Keine Ahnung, was Du mit Query meinst,

        zum Beispiel: http://localhost/blabla/blabla.php?xyz=Willkommen&abc=Homepage

        Also Parameter an eine php-Datei (oder cgi, wie mans eben auslegt).

        _Das_ sind Querys...