siba: umlaute im href maskieren

Hi,

ich habe folgendes Problem:

Aus mehreren Variablen baue ich die Pfadangabe zu einer Datei + Dateinamen an, um diese über einen Link 'online anzusehen' (z.B. Textdatei). Im href des Links steht die generierte Pfadangabe.

Bei einem Pfad ohne Umlaute klappt das auch, bei Umlauten/Sonderzeichen hingegen nicht.
Nach diversem Stöbern habe ich versch. Methoden zum Maskieren ausprobiert (urlencode, rawurlencode, etc.), aber das hat nichts gebracht - im Gegenteil, dann funktioniert nicht einmal mehr der Pfad ohne Umlaute/Sonderzeichen.

Weiß jemand, wie ich den href maskieren muss?
Danke im Voraus und Grüße

Siba

  1. Moin

    Weiß jemand, wie ich den href maskieren muss?
    Danke im Voraus und Grüße

    Siba

    sehr einfach
    <a href="test.php">Tester </a>
     oder aber auch
    <a href='test.php'>Tester </a>
    sonderzeichen in urls soltest Du wirklich drauf verzichten.

    TomIRL

    1. sehr einfach
      <a href="test.php">Tester </a>
       oder aber auch
      <a href='test.php'>Tester </a>
      sonderzeichen in urls soltest Du wirklich drauf verzichten.

      TomIRL

      Hi, danke für Deine Antwort, aber so habe ich das nicht gemeint.
      Wie man in html einen Link setzt, ist mir klar.

      Ich lese ein Verzeichnis aus. In diesem sind wieder Verzeichnisse, die mit Umlauten sind. Auf Dateien (z.B. Textdateien)in diesen Verzeichnissen will ich Links setzen, damit man sie direkt im Browser ansehen kann.
      Den Verzeichnisnamen bekommt das dafür zuständige Skript mitgegeben. Den Dateinamen hole ich mir von der Instanz, die ich zu der Datei bilde:

      $pfad = $verzeichnisname . "/" . $dateiName;

      Dann:

      <a href="<?= $pfad  ?>" target="_blank">LINK</a>

      Wie gesagt, ohne Umlaute funktioniert das. Ich kann nicht garantieren, dass alle Verzeichnisse ohne Umlaute sind, also muss ich das Problem angehen. Die Umlaute müssen irgendwie maskiert werden. Mit der Methode rawurlencode habe ich das bei der Übergabe der Verzeichnisnamen an das Skript gemacht und das geht. Im href lief das aber nicht.

      Ich hoffe, das ist so verständlicher...weißt Du eine Lösung?

      Danke nochmals

      Gruß, siba

      1. Moin,

        Ich hoffe, das ist so verständlicher...weißt Du eine Lösung?

        Du musst besondere Zeichen, wenn sie ihre besondere Bedeutung nicht ausleben sollen und komische Zeichen im URL (so ziemlich alles was kein ASCII ist, passt potentiell in diese Kategorie) passend kodieren. Für URLs geht die Kodierung über %XX (wobei XX die Hexadezimaldarstellung der Zeichennummer ist). _Zusätzlich_ musst du für HTML bedeutsame Zeichen noch in der für HTML nötigen Kodierung darstellen, wenn sie ihre besondere HTML-Bedeutung nicht annehmen sollen. Das gilt jetzt besonders für & was als & kodiert werden muß.

        Du hast leider kein Beispiel gegeben, aber ich tippe einfach mal darauf, dass du / auch urlkodiert hast, obwohl es als Pfadtrenner eingesetzt werden soll. In kodierter Form wird es als Bestandteil des Verzeichnis-/Dateinamens angesehen.

        --
        Henryk Plötz
        Grüße aus Berlin
        ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
        ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
        1. Hi,

          Du musst besondere Zeichen, wenn sie ihre besondere Bedeutung nicht ausleben sollen und komische Zeichen im URL (so ziemlich alles was kein ASCII ist, passt potentiell in diese Kategorie) passend kodieren. Für URLs geht die Kodierung über %XX (wobei XX die Hexadezimaldarstellung der Zeichennummer ist). _Zusätzlich_ musst du für HTML bedeutsame Zeichen noch in der für HTML nötigen Kodierung darstellen, wenn sie ihre besondere HTML-Bedeutung nicht annehmen sollen. Das gilt jetzt besonders für & was als & kodiert werden muß.

          Also müsste ich mir für die Umlaute die Kodierung raussuchen und die dann einfach im String ersetzen?

          Du hast leider kein Beispiel gegeben, aber ich tippe einfach mal darauf, dass du / auch urlkodiert hast, obwohl es als Pfadtrenner eingesetzt werden soll. In kodierter Form wird es als Bestandteil des Verzeichnis-/Dateinamens angesehen.

          Kodiert habe ich im Moment nichts und der Link klappt ja auch, wenn keine Umlaute im Pfad sind. Der Pfadtrenner funktioniert also.
          Dieser zusammengesetzte Pfad funktioniert:

          /intranet/pro/dokumente/SPT-Sophotec/SPT-0201-Life
          Labs/15_20030605_164133.txt

          Dieser aber nicht:

          /intranet/pro/dokumente/ONO-KONO - Büro für Mediales/ONO-0205-Alte Arbeiten/16_20030605_164447.txt

          Ich probiere das mit den Hexa-werten mal aus. Danke für die Antwort!

          Gruß, siba

          1. Moin,

            Dieser aber nicht:

            /intranet/pro/dokumente/ONO-KONO - Büro für Mediales/ONO-0205-Alte Arbeiten/16_20030605_164447.txt

            Du musst auch mindestens die Leerzeichen durch %20 ersetzen. Ich meinte nur, dass wenn du da einfach undifferenziert ein urlencode draufwirfst, es dir sicher auch die / wegcodieren wird.

            --
            Henryk Plötz
            Grüße aus Berlin
            ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
            ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
            1. Hi,

              Du hattest recht: jetzt klappt es: ich kodiere den Verzeichnisnamen mit rawurlencode(), dann ersetze ich in dem String alle %2F durch / ...
              Danke!

              Gruß, siba

              1. Moin!

                Du hattest recht: jetzt klappt es: ich kodiere den Verzeichnisnamen mit rawurlencode(), dann ersetze ich in dem String alle %2F durch / ...

                Das ist ja aber nun auch wieder falsch. Ein / kann möglicherweise in dummen Dateinamen vorkommen! Der Verzeichnistrenner kann ja auch \ sein.

                Was du machen mußt: Den Dateinamen mit möglichen Umlauten in rawurlencode() codieren und _dann_ erst zusammensetzen. Wenn du weitere variable Bestandteile in der URL hast, dann auch diese _einzeln_ codieren.

                - Sven Rautenberg

                --
                ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
                1. Moin,

                  Das ist ja aber nun auch wieder falsch. Ein / kann möglicherweise in dummen Dateinamen vorkommen!

                  Also unter Linux ist der / so ziemlich das einzige Zeichen das nicht im Dateinamen erlaubt ist (escapen bringt nichts). Unter Windows kann man so gut wie kein cooles Zeichen in einem Dateinamen verwenden (ganz gleich ob /, |, \ oder ?) da man dort offensichtlich zu doof zum escapen war.

                  Selbstverstädlich sagt das nur etwas über das Dateisystem aus. Da Pfadbestandteile von URLs aber nicht notwendigerweise auf ein Dateisystem gemappt werden müssen, kann da tatsächlich ein / vorkommen können. In der Anwendung hier ist das aber eher unwahrscheinlich.

                  --
                  Henryk Plötz
                  Grüße aus Berlin
                  ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
                  ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~