Tobias H.: URL Problem

Hallo,
ich lese aus einer Datenbank mehrere URL auf und leite dann auf diese weiter. Das funktioniert auch wunderbar, nur bei URLs welche Umlaute benutzen funktioniert es nicht mehr...weiß vielleicht jemand von euch woran das liegt respektive wie ich das lösen kann?

hier der codeausschnitt:
header('content-type: text/html; charset=utf-8');
header ("Location: ".$link);

liebe grüße
tobi

  1. Hallo Tobi,

    DAS sollte dir weiter helfen. Es handelt sich da zwar um eine andere Problematik, aber es scheint so, als ob Umlaute im Header nur codiert vorhanden sein dürfen.

    1. vielen dank für deine schnelle antwort... ;)

      hättest du vllt eine idee wie ich das in php progn könnte...kann das nicht umsetzen...^^

      grüße
      tobi

      1. hättest du vllt eine idee wie ich das in php progn könnte...kann das nicht umsetzen...^^

        Vorzugsweise garnicht, denn dein Ansatz ist falsch.
        Das Problem ist nicht, dass du URLs mit Umlauten falsch behandelst, sondern das Problem ist, dass du URLs mit Umlauten hast.
        URLs haben schlichtweg keine Umlaute zu enthalten, also sorg dafür, dass in deiner Datenbank auch nur gültige URLs sind.

        Gruß,
        Andreas

        1. Hello,

          URLs haben schlichtweg keine Umlaute zu enthalten, also sorg dafür, dass in deiner Datenbank auch nur gültige URLs sind.

          Wo steht das?
          Ich war der Meinung, dass Domainnamen mit Umlauten und Sonderzeichen inzwischen gestattet wären.

          Es können nur noch nicht alle Browser und alle Server vertragen.
          Ob alle anderen Hobs im Netz damit umgehen können, kann man ja als Normalbetreiber eines Servers auch nicht nachprüfen.

          Oder habe ich das jetzt nur geträumt?

          Ein harzliches Glückauf

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Nabend,

            Wo steht das?
            Ich war der Meinung, dass Domainnamen mit Umlauten und Sonderzeichen inzwischen gestattet wären.

            Es können nur noch nicht alle Browser und alle Server vertragen.
            Ob alle anderen Hobs im Netz damit umgehen können, kann man ja als Normalbetreiber eines Servers auch nicht nachprüfen.

            Oder habe ich das jetzt nur geträumt?

            ach gott, ja... dieses Übel.

            Hier muss man jetzt ja differenzieren was die URL verarbeitet. Da die URL in diesem Fall an den Browser geht, darf sie jetzt im Domain-Teil Umlaute enthalten, ja... Aber deine Annahme, dass "das Netz" die Umlautdomains können muss ist falsch, denn die Umlaut-Domains werden im Browser auf Domains abgebildet, die mit dem ASCII Zeichensatz auskommen.

            Üblicherweise besteht eine URL aber trotzdem nur aus ASCII Zeichen, und hier gibt es keine Umlaute. Umlaute in URLs können nur dort existieren, wo du selbst den Zeichensatz bestimmen und dementsprechend interpretieren kannst (also z.B. als ein Parameter für ein PHP Skript).
            Ich hab leider auf die Schnelle keine Info dafür gefunden, welchen Zeichensatz HTTP verwendet - im zweifelsfalle ist es aber auf ASCII begrenzt...

            Gruß,
            Andreas

            1. Ich hab leider auf die Schnelle keine Info dafür gefunden, welchen Zeichensatz HTTP verwendet - im zweifelsfalle ist es aber auf ASCII begrenzt...

              Nicht HTTP, aber dafür noch besser...
              RFC 1738 sagt zu URLs:
              "URLs are written only with the graphic printable characters of the US-ASCII coded character set."
              Somit sind Umlaute in URLs primär nicht zu verwenden. Falls doch, müssen sie entsprechend encodet werden (%XX). Die Frage ist hier, nach welchem Zeichensatz. Wenn man also unbedingt einen Umlaut z.B. im Domainnamen haben möchte, würde ich diesen entsprechend nach dem Zeichensatz des HTML Dokumentes encoden.

              Gruß,
              Andreas

    2. Hello,

      DAS sollte dir weiter helfen. Es handelt sich da zwar um eine andere Problematik, aber es scheint so, als ob Umlaute im Header nur codiert vorhanden sein dürfen.

      Hier müsste aber eigentlich rawurlencode() ausreichen für die Stamm-URL und urlencode() für jeden angehängten Parameter oder dessen Namen. Die Teile müssen alle _einzeln_ codiert werden.

      http://de3.php.net/manual/de/function.rawurlencode.php

      Eine quoted printable Codierung ist hier nicht erforderlich.

      Ein harzliches Glückauf

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de