umlaute im href maskieren
siba
- php
0 TomIRL0 siba0 Henryk Plötz0 siba0 Henryk Plötz0 siba
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
Moin
Weiß jemand, wie ich den href maskieren muss?
Danke im Voraus und GrüßeSiba
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
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
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.
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
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.
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
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
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.