Suche PHP Funktion die URL Fähige Strings aus utf8 strings erzeugt
Hi,
ich suche eine PHP Stringfunktion die UTF8 Strings Umwandelt in URL "Fähige" Strings. Konkret nutze ich UTF8 Strings aus einer Datenbank um sie in als Teile von urls zu benutzen (die ich dann mittels rewrite Methoden auf dynamisch erstellte Dokumente weiterleite). Mein Problem sind eigentlich zwei Probleme: 1. Kann ich die UTF8 Strings nicht unmanipuliert als url Bestandteile nutzen weil dort Sonderzeichen enthalten sind die die meisten Browser nicht unterstützen in urls, von Serverseitigen Problemen mal abgesehen. Deshalb brauche ich zunächst eine Umwandlung. Die Umwandlung soll allerdings etwas spezifischer sein was mich zu meinem zweiten Problem führt: 2. Da diese generierten URLs unter anderen den Zweck erfüllen sollen das sie den Webseitenbesuchern als Erkennungs- oder Erinnerungshilfe dienen sollen, sollten die nicht unterstützten Zeichen natürlich nicht einfach beliebige Zeichen umgewandelt werden, ich hätte z.B. gerne: ä->ae oder wenn das nicht geht ä->a, aber auch zeichen wie: à, â, å usw. sollen in a und nicht in e oder so, ersetzt werden, weil damit für deutsche Besucher (und für die ist die Seite optimiert) noch eine gewisse Ähnlichkeit zu den originalen Zeichen erhalten bleibt. Meine bisherige Methode, die Strings durch eine schar str-replaces zu jagen macht in sofern Probleme das ich immer wieder überraschend auf neue Abwandlungen von Buchstaben stoße die ich vorher nicht kannte. Man glaubt es kaum wie viele Möglichkeiten es gibt a, e usw. mit Strichen, Punkten, etc zu versehen. |
URL-konform ist bereits der Rückgabewert der rawurlencode()-Funktion. Bei UTF-8 würden sogar in der Adressfeld die kodierten Zeichen statt der Kodierungen angezeigt werden.
Da du das aber wohl nicht möchtest, könntest du die iconv()-Funktion nutzen, um die Nicht-ASCII-Zeichen durch eine Transliteration zu ersetzen: PHP-Code:
|
Da es für so eine Umschreibung keine feste Norm gibt, die alle Fälle erfaßt, wirst du um eine manuell gepflegte Liste nicht herumkommen.
Ein str_replace() genügt: Die Funktion akzeptiert auch Arrays als Parameter. |
Zitat:
|
Es sind eben nur ähnliche Zeichen und manche Zeichen können gar nicht überführt werden, was zu einer Fehlermeldung führt. Um das zu vermeiden, solltest du noch zusätzlich ein //IGNORE anfügen, also ASCII//TRANSLIT//IGNORE.
|
Ok danke, ich werde mal ein paar Tests durchführen, und zur Not den String vorher schonmal mit str_replace überarbeiten (insbesondere um die deutschen Umlaute durch Doppelbuchstaben zu ersetzen) und den string erst danach mit iconv behandeln (um nicht berücksichtigte Sonderzeichen noch abfangen zu können)
|
Wie gesagt: Du könntest die Zeichen ja auch direkt verwenden und müsstest nur noch die rawurlencode()-Funktion darauf anwenden.
|
Hmm es scheint so als würde iconv bei angabe von //IGNORE die oben genannten Variationen von a (inklusive des deutchen ä) nicht ignorieren sondern durch ? ersetzen. Ich denke nicht das es an meiner Darstellung liegt, denn die Seite wird als utf8 dokument geliefert und angezeigt und die utf8 Zeichen (die Variationen von a) werden korrekt angezeigt, nur der auch ausgegebene iconv behandelte String enthält nur "?". Soll das so sein oder kann das doch ein Darstellungsfehler sein?
EDIT: ich lese gerade das mein Problem irgentwie mit setlocale zusammenhängt. Keine Ahnung ob ich darauf Einfluss habe, mal schauen was das überhaupt ist :) |
Dann liegen die Daten wohl nicht in UTF-8 vor. Schau mal, was Folgedes ausgibt:
PHP-Code:
|
Zitat:
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 15:43 Uhr. |
Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
© Dirk H. 2003 - 2023