SQL Sonderzeichen lesbar "escapen"

gaunt

Lt. Commander
Registriert
Aug. 2007
Beiträge
2.016
Hi
ich hab mal wieder nen Problem. Da ist ne mysql DB mit diversen Textfeldern. Aus diesen muss eine URL generiert werden. Die sollte aber nichtnur technisch funktionieren sondern auch mehr oder weniger lesbar sein.
Ich dachte erst hier gehts nur Deutschland, also flott was freestyle gescriptet was mir alle SZ die mir spontan eingefallen sind stumpf ersetzt. Also z.b. ein "ü" zu "ue" ein Leerzeichen zum Bindestrich usw.
Jetzt muss ich aber feststellen, das die Daten nichtnur in Deutsch vorliegen sondern in aller Herren Länder Sprachen.

Kommen also "ñ" und Konsorten dazu. Und dann gibts da ja noch viel mehr die ich vielleicht garnicht kenne. Also ist von Hand keine gute Option. Soweit ich das sehe handelt es sich nur um romanische Zeichen. Also wenigstens keine Kyrillischen oder Chinesischen Zeichen.

Gibt es hier eine Mysql Bordfunktion? Ich meine definitiv nicht ein Escapen, Quoten oder Maskieren. Sondern eine Umsetzung von Sonderzeichen in unkritische aber lesbare Zeichen. Also ein Enje zu n oder ein / zum -.
 
Das Zauberwort ist Encoding. Nutz das Richtige (wahrscheinlich einfach UTF-8) und gut ist. Alternativ wenn du wirklich keinerlei Umlaute in URLs willst: Einfach mit nem Regex [^a-zA-Z] rausfiltern.
 
So siehts aus: Stell alle Aspekte deiner Anwendung konsequent auf UTF-8 um. Sämtliches notwendige URL-Escaping (oder Escaping überhaupt) sollte so oder so auf Anwendungsebene erfolgen, nicht auf Datenbankebene.
 
Hi
nö halt. Mit dem Encoding ist alles OK. Die Zeichen wandern ja korrekt durch DB und Anwendung. App, Connection und DB laufen alle mit UTF8. Technisch ist alles ok, und mit nem URLEncode kann ich natürlich auch die URL technisch korrekt bauen. Nur soll sie eben mehr oder weniger lesbar sein.

Aber es scheint tatsächlich nix fertiges (vom kompletten Bibliotheken abgesehen) zu geben. Dann werde ich wohl von Hand nen Mapping der wichtigsten Zeichen erstellen und was übrig bleibt und nicht Alphanummerisch ist wird wie Yuuri schreibt mit ner Regex gelöscht oder durch ein unkritisches Zeichen ersetzt.

PS: Vielleicht habt ihr ja hier noch nen Tipp:
https://www.computerbase.de/forum/threads/fw-os-editor-fuer-grosse-textfiles.1438746/#post-16899521
 
Da der UTF-8 - Raum ewig groß ist, gibt es nur eine menschenlesbare Version: UTF-8. Es ist einfach nicht möglich, dass du z.B. 紅 gleichzeitig menschenlesbar und als URL-Format hast, außer du würdest es jetzt direkt auf ASCII transkribieren.

Du kannst dein Glück mit http://php.net/manual/de/class.transliterator.php sowas hier versuchen... oder andere "romanize"-Funktionen. Aber darauf setzen würde ich nicht.
 
...außer du würdest es jetzt direkt auf ASCII transkribieren.
Genau darauf läuft es hinaus.

Der Transliterator::transliterate könnte gehen. Das dumme ist nur, ich arbeite auf ner ETL Strecke und nicht in nem Webserver. Hm, aber nen Interpreter hat man schnell, und über das ETL Tool ein Shell PHP aufrufen... Würde gehen. Behalte ich mal im Hinterkopf! THX!
 
Zurück
Oben