Tommi: UTF8 in der URL, Teil 2

Moin!

Habe im Archiv schon fast die Antwort gefunden: UTF8 in der URL

Allerdings verstehe ich noch nicht, wie man es nun richtig macht bzw. wie es in der Wikipedia gemacht wird.

So weit habe ich es verstanden:

  • URLs in der Wikipedia sind "URL-encoded" und sehen z.B. so aus:
    http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80

  • Moderne Browser zeigen solche URLs in Links (Statusleiste) bzw. im Adressfeld "decoded" an, also so:
    http://ru.wikipedia.org/wiki/Компьютер

  • Wenn ich in modernen Browsern http://ru.wikipedia.org/wiki/Компьютер eingebe, wird tatsächlich ein Request auf http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80 gesendet.

  • Der Internet Explorer macht das nicht so[1]. Trotzdem bekomme ich die richtige Seite geliefert, wenn ich im IE http://ru.wikipedia.org/wiki/Компьютер eingebe. Hier muss also irgend ein "Rewriting" stattfinden!?

Wie geht das?

Tommi

[1] Dieses PHP-Testskript ...

<?php  
header('Content-Type: text/plain; charset=utf-8');  
if(isset($_GET['q'])) echo $_GET['q'];  
?>

... gibt auf die Anfrage http://example.com/test.php?q=Компьютер in Firefox, Opera, Chromium, Safari usw. "Компьютер" aus. Im IE wird hingegen "?????????" ausgegeben.

  1. Hi,

    • Der Internet Explorer macht das nicht so[1]. Trotzdem bekomme ich die richtige Seite geliefert, wenn ich im IE http://ru.wikipedia.org/wiki/Компьютер eingebe. Hier muss also irgend ein "Rewriting" stattfinden!?

    nein. Die von Dir ausprobierten Zeichen ergeben lediglich per Zufall kein Problem, wenn sie un- oder falsch kodiert übertragen werden. Der Server führt eine Dekodierung durch, diese kann fehlschlagen, wenn die Daten nicht korrekt kodiert waren.

    ... gibt auf die Anfrage http://example.com/test.php?q=Компьютер in Firefox, Opera, Chromium, Safari usw. "Компьютер" aus. Im IE wird hingegen "?????????" ausgegeben.

    Welche Daten übermittelt der IE? Befrage das Logfile Deines Servers.

    Oder lass es bleiben. Es existiert kein Grund, auf korrekte Kodierungen zu verzichten.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. nein. Die von Dir ausprobierten Zeichen ergeben lediglich per Zufall kein Problem, wenn sie un- oder falsch kodiert übertragen werden.

      Wenn das alles nur Zufall ist, funktioniert das aber erstaunlich gut, selbst z.B. mit Cree-Zeichen

      Der Server führt eine Dekodierung durch, ...

      Genau das würde mich interessieren! Wie sieht so eine Dekodierung aus?

      Welche Daten übermittelt der IE? Befrage das Logfile Deines Servers.

      127.0.0.1 - - [11/Jan/2010:10:12:44 +0100] "GET /test.php?q=????????? HTTP/1.1" 200 312 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"

      Oder lass es bleiben. Es existiert kein Grund, auf korrekte Kodierungen zu verzichten.

      Ich finde schon, dass es benutzerfreundlich ist, wenn man auch http://ru.wikipedia.org/wiki/Компьютер statt http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80 in die Adressleiste eingeben kann.

      Tommi

      1. Hi,

        Wenn das alles nur Zufall ist, funktioniert das aber erstaunlich gut,

        ja, in vielen Fällen schon.

        Der Server führt eine Dekodierung durch, ...
        Genau das würde mich interessieren! Wie sieht so eine Dekodierung aus?

        "%XY" wird als hexadezimale Repräsentation eines Bytes erkannt und umgewandelt.

        Welche Daten übermittelt der IE? Befrage das Logfile Deines Servers.
        127.0.0.1 - - [11/Jan/2010:10:12:44 +0100] "GET /test.php?q=????????? HTTP/1.1" 200 312 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"

        Also komplett unkodierter Kram. Wenn man zufällig das selbe Encoding annimmt, das auch der Browser für die Zeichen wählte, kann man unter Umständen das richtige Ergebnis erhalten.

        Ich finde schon, dass es benutzerfreundlich ist,

        Benutzerfreundlichkeit hat exakt gar nichts damit zu tun. Die URL ist ein _technischer_ Bezeichner. Er unterliegt technischen Bedingungen, keiner Usability.

        wenn man auch http://ru.wikipedia.org/wiki/Компьютер statt http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80 in die Adressleiste eingeben kann.

        Suche mal bei Wikipedia nach "%" (ohne Anführungszeichen. Rufe statt dessen direkt http://ru.wikipedia.org/wiki/% auf (unverlinkt, weil die Forensoftware die URL sofort als fehlerhaft erkennt). Hat das irgendwas mit Benutzerfreundlichkeit zu tun?

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. "%XY" wird als hexadezimale Repräsentation eines Bytes erkannt und umgewandelt.

          OK, URL-en- und decoding ist mir bekannt. Damit komme ich hier aber nicht weiter. Ich hätte es einfach gerne "schön" und dass es auch im IE "funktioniert". Eben so, wie in der Wikipedia. Mit Problemen wie http://example.com/% könnte ich leben. Immerhin - Standard hin oder her - unterstützen moderne Browser ja so etwas "einfach eintipp- oder reinkopierbares" (um es nicht benutzerfreundlich zu nennen). Jetzt suche ich eben noch nach einer Lösung für den IE.

          Tommi

          1. hi,

            [..] Jetzt suche ich eben noch nach einer Lösung für den IE.

            Naja, das Thema hatten wir hier schonmal. Und wie Cheatah schon schrieb, Benutzerfeundlichkeit und mögliche Eingaben in der Adresszeile sind nicht vereinbar. Oder anders ausgedrückt: Was ein Browser aus der händischen Eingabe in der Adresszeile macht, ist nicht beeinflußbar.

            Nichts spricht jedoch dagegen, ein <a href> auf einer Seite zu notieren, dass das einmal für den Besucher verständliche Zeichen sind und nach dem Draufklicken ein gültiger URL entsteht. Und das sollte mit _jedem_ Browser zu machen sein, nicht nur mit dem IE.

            Hotti

            1. Was ein Browser aus der händischen Eingabe in der Adresszeile macht, ist nicht beeinflußbar.

              Ich frage jetzt einfach mal so: Weiß jemand, wie es[1] bei Wikipedia gemacht wird?

              Tommi

              [1] man kann z.B. http://ru.wikipedia.org/wiki/Компьютер im Browser eingeben und "landet" auf der Seite http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80. Und das geht in allen von mir getesteten Browsern.

              1. @@Tommi:

                nuqneH

                Was ein Browser aus der händischen Eingabe in der Adresszeile macht, ist nicht beeinflußbar.

                Ich frage jetzt einfach mal so: Weiß jemand, wie es[1] bei Wikipedia gemacht wird?

                Nicht bei Wikipedia, sondern im Browser. Bei Eingabe von "http://ru.wikipedia.org/wiki/Компьютер" sieht der HTTP-Request (den der Browswer an den Server schickt) so aus:

                http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80

                GET /wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80 HTTP/1.1
                Host: ru.wikipedia.org

                Qapla'

                --
                Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
              2. Was ein Browser aus der händischen Eingabe in der Adresszeile macht, ist nicht beeinflußbar.

                Ich frage jetzt einfach mal so: Weiß jemand, wie es[1] bei Wikipedia gemacht wird?

                So wie überall...

                [1] man kann z.B. http://ru.wikipedia.org/wiki/Компьютер im Browser eingeben und "landet" auf der Seite http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80. Und das geht in allen von mir getesteten Browsern.

                Du gibst eine IRI ein, der Browser konvertiert nach URI, wenn er die Ressource navigiert.
                Der Locationbar ist nicht identisch mit dem href Attribut eines Links. der Locationbar ist ein multipurpose Feld.

                Eine UTF-8 IRI, wenn urlencoded ergibt eine URI
                Eine URI, wenn urlencoded, ergibt sich selbst.

                mfg Beat

                --
                ><o(((°>           ><o(((°>
                   <°)))o><                     ><o(((°>o
                Der Valigator leibt diese Fische
                1. Hi,

                  Der Locationbar ist nicht identisch mit dem href Attribut eines Links. der Locationbar ist ein multipurpose Feld.

                  oder, um es ganz klar auszudrücken: ein Feld des User-Interfaces. Dass beispielsweise Outlook es ermöglicht, eingegebene E-Mail-Adressen mit Semikolon zu trennen, ist absolut legitim. Erzeugt man hingegen selbst eine E-Mail, ist es vollkommen falsch, statt des hierzu definierten Kommas ein Semikolon zu verwenden.

                  Felder des User-Interfaces sollen vom System so genutzt werden, dass erkenn- und behebbare Fehler der Eingabe behoben werden. Ob und inwiefern das System das macht, lässt Aussagen über seine Usability zu - nicht jedoch darüber, ob und inwiefern eine (selbst in ausnahmslos allen Systemen) Eingabe technisch gültig ist. Kyrillische Zeichen sind in der URL *nicht erlaubt*, entsprechend hat es nicht das Geringste mit Usability zu tun, mit ihnen klar zu kommen. Sie sind und bleiben technisch falsch.

                  Cheatah

                  --
                  X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                  X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                  X-Will-Answer-Email: No
                  X-Please-Search-Archive-First: Absolutely Yes
              3. Hi!

                Was ein Browser aus der händischen Eingabe in der Adresszeile macht, ist nicht beeinflußbar.

                Firefox - about:config - network.standard-url.encode-utf8 = true

                Ich frage jetzt einfach mal so: Weiß jemand, wie es[1] bei Wikipedia gemacht wird?
                [1] man kann z.B. http://ru.wikipedia.org/wiki/Компьютер im Browser eingeben und "landet" auf der Seite http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80. Und das geht in allen von mir getesteten Browsern.

                Bei Kyrillisch bleibt dem Browser nicht viel anderes übrig, als UTF-8 zu verwenden. Obige Konfiguration auf false zu setzen hat den FF (3.0) jedenfalls weiterhin veranlasst, UTF-8 und urlencodede Requests zu stellen.

                Nimmt man hingegen http://de.wikipedia.org/wiki/Ärger und schaut mit der livehttpheaders-Extension zu, was da geredet wird, so ... - aber ich will mal nicht vorgreifen.

                Übrigens (für interessierte Mitleser und das sich erinnernde Stammpublikum), neulich war hier mal Thema, dass der FF im Pfad-Teil der URL UTF-8 nimmt und im Query-Teil nicht (konkret: ISO-8859-1). Die Antwort ist obige Direktive, welche per Default auf true steht und network.standard-url.encode-query-utf8, welche auf false steht.

                Lo!

            2. Nichts spricht jedoch dagegen, ein <a href> auf einer Seite zu notieren,

              Unterscheide href="http:", dessen Inhalt eine URI nach URI-Norm sein muss.
              vom Inhalt des a Elements, der irgend ein Inhalt sei kann, also auch die UTF-8 IRI, aus der sich die URI in href ableiten lässt.

              ... dass das einmal für den Besucher verständliche Zeichen sind und nach dem Draufklicken ein gültiger URL entsteht. Und das sollte mit _jedem_ Browser zu machen sein, nicht nur mit dem IE.

              macht keinen sinn...

              mfg Beat

              --
              ><o(((°>           ><o(((°>
                 <°)))o><                     ><o(((°>o
              Der Valigator leibt diese Fische
              1. Nichts spricht jedoch dagegen, ein <a href> auf einer Seite zu notieren,

                Unterscheide href="http:", dessen Inhalt eine URI nach URI-Norm sein muss.
                vom Inhalt des a Elements, der irgend ein Inhalt sei kann, also auch die UTF-8 IRI, aus der sich die URI in href ableiten lässt.

                Genau das meinte ich.
                href-Attr: Technisch
                a-Tag:     visual/usable

                Hotti

          2. "%XY" wird als hexadezimale Repräsentation eines Bytes erkannt und umgewandelt.

            OK, URL-en- und decoding ist mir bekannt. Damit komme ich hier aber nicht weiter. Ich hätte es einfach gerne "schön" und dass es auch im IE "funktioniert".

            Schöne URIs bestehen aus ASCII Zeichen.
            Schöne IRIs bestehen aus UTF-8 Zeichen.

            Nothing else matters.

            Ob der Browser den Locationbar als IRI-Feld oder als URI-Feld darstellt, geht den Contentautor nichts an, sondern den User seines Browsers.

            mfg Beat

            --
            ><o(((°>           ><o(((°>
               <°)))o><                     ><o(((°>o
            Der Valigator leibt diese Fische
  2. Hallo!

    Anscheinend habe ich mich undeutlich ausgedrückt und wir reden aneinander vorbei.

    Unten stehend ist ein kleines Testskript (PHP). Ich möchte, dass folgendes ausgegeben wird:

    "Компьютер ist russisch und bedeutet Computer."

    ... und zwar wenn entweder ...

    "http://example.com/?q=Компьютер"

    ... oder ...

    http://example.com/?q=%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80

    ... in das Browser-Adressfeld eingegeben wird. Das geht auch mit Firefox, Safari, Chrome und anderen Browsern, da diese selbstständig die Benutzereingaben "URL-encoden". Es geht allerdings nicht mit dem IE.

    So etwas scheint aber möglich zu sein, siehe Wikipedia:

    http://ru.wikipedia.org/wiki/Компьютер
    http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80

    Über beide Varianten bekomme ich diese Seite, und zwar auch im IE.

    Mich würde nun interessieren, was ich tun muss, damit das auch mit dem Testskript klappt.

    Tommi

    <?php  
    if(isset($_GET['q']))  
    {  
       $q = urldecode($_GET['q']);  
      
       switch($q)  
       {  
          case 'Компьютер':  
             $content = 'Компьютер ist russisch und bedeutet Computer.';  
             break;  
          case 'ᐙᔅᑲᐦᐄᑲᓐ':  
             $content = 'ᐙᔅᑲᐦᐄᑲᓐ ist cree und bedeutet Haus.';  
             break;  
          default:  
             $content = 'Tja, ich weiß auch nicht, was <em>'.htmlspecialchars($q).'</em> bedeutet. Frag doch mal <a href="http://www.google.com/search?q='.urlencode($q).'">Google</a>.';  
       }  
    }  
    else  
    {  
       $content = 'Hello Wold!';  
    }  
      
    header('Content-Type: text/html; charset=utf-8');  
      
    ?><!DOCTYPE html>  
    <html>  
      
    <head>  
      
    <meta http-equiv="content-type" content="text/html; charset=utf-8">  
      
    <title>Test</title>  
      
    </head>  
      
    <body>  
      
    <p><?php echo $content; ?></p>  
      
    </body>  
      
    </html>
    
    1. So etwas scheint aber möglich zu sein, siehe Wikipedia:

      http://ru.wikipedia.org/wiki/Компьютер
      http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80

      Über beide Varianten bekomme ich diese Seite, und zwar auch im IE.

      Ich nicht.
      Im IE bekomme ich für den ersten Fall die Seite:
      http://ru.wikipedia.org/wiki/

      mfg Beat

      --
      ><o(((°>           ><o(((°>
         <°)))o><                     ><o(((°>o
      Der Valigator leibt diese Fische
    2. Hi,

      Anscheinend habe ich mich undeutlich ausgedrückt und wir reden aneinander vorbei.

      nein, ich glaube nicht. Ich habe eher den Eindruck, dass du den Vorgang, der da abläuft, nicht im Detail verstanden hast.

      1. Du gibst in der Adresszeile ein:
         Fall a:  http://ru.wikipedia.org/wiki/Компьютер
         Fall b:  http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80
      2. Dein Browser interpretiert die Eingabe. Er stellt im Fall a fest, dass einige Zeichen in der URL
         nicht zulässig sind und codiert sie entsprechend, während er im Fall b nichts tun muss.
      3. Der Browser sendet in beiden Fällen folgenden, korrekt codierten Request an den Server:
         GET /wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80 HTTP/1.1
      4. Der Browser "korrigiert" die Anzeige in der Adresszeile nach eigenem Ermessen.
         Während der IE sie ggf. durch die URL-codierte Fassung ersetzt, zieht der Firefox die
         Angabe in Klartextzeichen vor und konvertiert ggf. URL-encoded in Klartext zurück.

      http://ru.wikipedia.org/wiki/Компьютер
      http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80

      Über beide Varianten bekomme ich diese Seite, und zwar auch im IE.

      Ich habe hier nur IE bis maximal Version 6. Der zeigt mir aber nach Eingabe der URL, egal in welcher Form, immer die percent-encoded Fassung an. Der Seiteninhalt an sich ist natürlich immer identisch, denn es wird ja dieselbe Ressource angefordert.

      Mich würde nun interessieren, was ich tun muss, damit das auch mit dem Testskript klappt.

      Nichts. Du hast keinen Einflüss darauf, wie der Browser die Adresszeile aufbereitet.

      <?php
      if(isset($_GET['q']))
      {
         $q = urldecode($_GET['q']);

      Hier bist du in einem anderen Märchen: Dieses Beispiel verwendet URL-Parameter. Die behandelt mein Firefox zwar exakt genauso wie oben beschrieben, mein IE sendet sie aber uncodiert an den Server. Eine Eingabe von http://localhost/?q=Ätsch erzeugt im Server-Log einen Eintrag für /?q=\xC4tsch.
      Ob neuere IEs das anders machen, kann ich nicht sagen.

      So long,
       Martin

      --
      Lieber eine Stumme im Bett, als eine Taube auf dem Dach.
    3. Hi!

      "http://example.com/?q=Компьютер"
      http://ru.wikipedia.org/wiki/Компьютер

      Beachte bitte, dass du hier zwei verschiedene Stellen hat. In der ersten Zeile hast du die fragliche Zeichenkette im Querystring, in der zweiten im Pfad. Zumindest der Firefox verhält sich da unterschiedlich. Wobei er in dem speziellen Fall beide Male die Zeichen in UTF-8 und anschließend URL-kodiert. Bei ISO-8859-1-Zeichen sieht das jedoch anders aus. Teste lieber alles zweimal, einmal mit kyrillischen oder anderen Nicht-ISO-8859-1-Zeichen und einmal mit ISO-8859-1 (jenseits von ASCII, also Umlaute beispielsweise).

      Erweitere also dein Beispiel noch um

      case 'Ärger':
          $content = 'Ärger bereiten mir diese Zeichen.';
          break;

      Desweiteren solltest du auch noch den HTML-Teil ergänzen um:

      <ul>
          <li><a href="?q=Компьютер">Компьютер</a></li>
          <li><a href="?q=ᐙᔅᑲᐦᐄᑲᓐ">ᐙᔅᑲᐦᐄᑲᓐ</a></li>
          <li><a href="?q=Ärger">Ärger</a></li>
        </ul>

      Du wirst dann sehen, dass sich nicht nur der FF unterschiedlich verhält, wenn du den Ärger in der Adresszeile eingibst oder wenn du den Link verwendest.

      Bei einem in die Adresszeile eingegebenen Wert weiß der Browser nicht, welche Kodierung die Zielseite erwartet. Da kann er nur irgendeiner Voreinstellung seinerseits folgen. Bei einem Link nimmt er die Kodierung, in der die den Link enthaltende Seite gehalten ist.

      Lo!

      1. Hi!

        Nachtrag:

        $q = urldecode($_GET['q']);

        Wenn PHP URL-kodierte Werte empfängt, so dekodiert es diese bereits, bevor die Werte in $_GET/$_POST landen. Im Script muss man im Normalfall nie urldecode() darauf anwenden.

        Lo!

        1. Hallo,

          Nachtrag:

          $q = urldecode($_GET['q']);
          Wenn PHP URL-kodierte Werte empfängt, so dekodiert es diese bereits, bevor die Werte in $_GET/$_POST landen. Im Script muss man im Normalfall nie urldecode() darauf anwenden.

          stimmt, das hatte ich auch noch schreiben wollen, dann aber doch vergessen.

          Ciao,
           Martin

          --
          Es existiert kein Weg, "für" etwas zu optimieren, sondern nur gegen alles andere.
            (Cheatah)
      2. Hallo!

        Hier das erweiterte Skript: http://test.solidwebhost.com/utf8url/ (Quellcode)

        Die Links "funktionieren" im IE (sowohl kodiert als auch nicht kodiert), Reinkopieren der nicht kodierten URLs geht im IE aber nicht.

        Tommi

        1. Hi,

          Hier das erweiterte Skript: http://test.solidwebhost.com/utf8url/ (Quellcode)

          sehr schön. :-)
          FF3 zeigt immer die Klartextversion in der Adresszeile an, egal welcher Link benutzt wurde.
          Opera 8.54 zeigt immer die URL-codierte Version in der Adresszeile an, egal welcher Link benutzt wurde.
          Und IE6 zeigt immer genau die Version in der Adresszeile an, die auch angeklickt wurde.
          Der Request an den Server ist dabei in allen Fällen korrekt URL-codiert.

          Die Links "funktionieren" im IE (sowohl kodiert als auch nicht kodiert), Reinkopieren der nicht kodierten URLs geht im IE aber nicht.

          Ups, stimmt.
          Da sind wir ja wieder genau an dem Knackpunkt, dass beim direkten Eingeben der URL keine Information über die Zeichencodierung vorliegt, die da verwendet werden soll. Also muss der Browser irgendeine Codierung einfach annehmen.
          IE nimmt in der Defaulteinstellung vermutlich Windows-1252, die anderen Browser UTF-8. Wie sieht's aus, wenn du den IE ebenfalls anweist, "URLs immer als UTF-8 zu senden" (Erweiterte Einstellungen)? Ich möchte jetzt ungern alle Browserfenster schließen, diese Änderung erfordert jedoch einen kompletten Browser-Neustart. Daher überlasse ich dir diesen Test ...

          So long,
           Martin

          --
          Die letzten Worte des Hardware-Bastlers:
          Das Netzkabel lass ich wegen der Erdung lieber dran.
          1. Wie sieht's aus, wenn du den IE ebenfalls anweist, "URLs immer als UTF-8 zu senden" (Erweiterte Einstellungen)?

            Du verwechselst ein Webmaster-Problem mit einem UA-User-Problem.

            mfg Beat

            --
            ><o(((°>           ><o(((°>
               <°)))o><                     ><o(((°>o
            Der Valigator leibt diese Fische
            1. Hallo,

              Wie sieht's aus, wenn du den IE ebenfalls anweist, "URLs immer als UTF-8 zu senden" (Erweiterte Einstellungen)?
              Du verwechselst ein Webmaster-Problem mit einem UA-User-Problem.

              nein, ich find's nur spannend, das Verhalten der UAs in bestimmten Fällen zu ergründen; zu sehen, wie welcher Browser seine Freiheitsgrade ausnutzt und auslegt. Einen echten Nutzwert hat dieses Wissen freilich nicht, zumal das Verhalten (da nicht standardisiert) in der nächsten Browserversion schon wieder anders sein kann.

              Ciao,
               Martin

              --
              Eine Nonne kommt in den Himmel. An der Pforte fragt Petrus: "Wer bist du?" - "Ich bin die Braut Jesu." Petrus stutzt einen Moment, ruft dann nach hinten: "He Freunde, habt ihr schon gehört? Der Juniorchef will heiraten!"
          2. Hi!

            Da sind wir ja wieder genau an dem Knackpunkt, dass beim direkten Eingeben der URL keine Information über die Zeichencodierung vorliegt, die da verwendet werden soll. Also muss der Browser irgendeine Codierung einfach annehmen.
            IE nimmt in der Defaulteinstellung vermutlich Windows-1252, die anderen Browser UTF-8.

            Wobei du da, wie schon gesagt, zumindest beim FF, auch noch zwischen Path- und Query-Teil unterscheiden musst.

            Lo!

            1. Wobei du da, wie schon gesagt, zumindest beim FF, auch noch zwischen Path- und Query-Teil unterscheiden musst.

              Tatsächlich, das scheint der Punkt zu sein (im IE!). Auf dem Testserver geht leider kein mod_rewrite, aber lokal klappt es mit dem Reinkopieren. Das wäre dann auch die Erklärung, warum es bei der Wikipedia geht.

              Tommi

              .htaccess:
              RewriteEngine On
              RewriteCond %{REQUEST_FILENAME} !-f
              RewriteCond %{REQUEST_FILENAME} !-d
              RewriteRule ^(.*)$ index.php?q=$1 [L]

              index.php:

              <?php  
              if(isset($_GET['q']))  
              {  
                 switch($_GET['q'])  
                 {  
                    case 'Компьютер':  
                       $content = 'Компьютер ist russisch und bedeutet Computer.';  
                       break;  
                    case 'ᐙᔅᑲᐦᐄᑲᓐ':  
                       $content = 'ᐙᔅᑲᐦᐄᑲᓐ ist cree und bedeutet Haus.';  
                       break;  
                    case 'Ärger':  
                       $content = 'Ärger bereiten mir diese Zeichen.';  
                       break;  
                    default:  
                       $content = 'Tja, ich weiß auch nicht, was <em>'.htmlspecialchars($_GET['q']).'</em> bedeutet. Frag doch mal <a href="http://www.google.com/search?q='.urlencode($_GET['q']).'">Google</a>.';  
                 }  
              }  
              else  
              {  
                 $content = '<em>nichts ausgewählt</em>';  
              }  
                
              header('Content-Type: text/html; charset=utf-8');  
                
              ?><!DOCTYPE html>  
              <html>  
                
              <head>  
                
              <meta http-equiv="content-type" content="text/html; charset=utf-8">  
                
              <title>Test</title>  
                
              </head>  
                
              <body>  
                
              <ul>  
                 <li><strong>Ärger</strong>  
                    <ul>  
                       <li><a href="Ärger">Ärger</a></li>  
                       <li><a href="%C3%84rger">%C3%84rger</a></li>  
                       <li>http://example.com/Ärger</li>  
                    </ul>  
                 </li>  
                 <li><strong>Компьютер</strong>  
                    <ul>  
                       <li><a href="Компьютер">Компьютер</a></li>  
                       <li><a href="%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80">%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80</a></li>  
                       <li>http://example.com/Компьютер</li>  
                    </ul>  
                 </li>  
                 <li><strong>ᐙᔅᑲᐦᐄᑲᓐ</strong>  
                    <ul>  
                       <li><a href="ᐙᔅᑲᐦᐄᑲᓐ">ᐙᔅᑲᐦᐄᑲᓐ</a></li>  
                       <li><a href="%E1%90%99%E1%94%85%E1%91%B2%E1%90%A6%E1%90%84%E1%91%B2%E1%93%90">%E1%90%99%E1%94%85%E1%91%B2%E1%90%A6%E1%90%84%E1%91%B2%E1%93%90</a></li>  
                       <li>http://example.com/ᐙᔅᑲᐦᐄᑲᓐ</li>  
                    </ul>  
                 </li>  
              </ul>  
                
              <p><strong><?php echo $content; ?></strong></p>  
                
              </body>  
                
              </html>
              
          3. Wie sieht's aus, wenn du den IE ebenfalls anweist, "URLs immer als UTF-8 zu senden" (Erweiterte Einstellungen)?

            Ich finde nur "UTF-8-URLs senden" (IE 6 & 7) und das ist bereits angehakt.

            Tommi

    4. hi,

      Unten stehend ist ein kleines Testskript (PHP). Ich möchte, dass folgendes ausgegeben wird:

      Es gibt keine Möglichkeit, STDOUT (Server) nach Adresszeile (Browser) umzuleiten.

      Hotti