johny7: mysql real escape wandelt nicht in utf8 um

Beitrag lesen

Moin allerseits,

[...] Ich dachte,die Eingaben werden automatisch in UTF8 umgewandelt...

Nein. Diese Funktion beachtet nur eine mit mysql_set_charset() eingestellte Kodierung beim Interpretieren der übergebenen Daten. Allerdings sind alle behandelten Zeichen im ASCII-Bereich und damit ist die eingestellte Kodierung (im Falle von ISO-8859-x und UTF-8) nicht mehr wichtig.

Eine Zeichenumkodierung findet potentiell nur auf dem MySQL-Server selbst statt, die mysql(i)_*-Funktionen machen in der Hinsicht nichts. Welche Kodierung der Server zu erwarten hat, kann man ihm mit der erwähnten Funktion mysql(i)_set_charset() oder einem SET-NAMES-Statement mitteilen.

Aha. Ja, SET NAMES ist vorhanden...

Wenn ich Text per POST schicke, funktioniert das mit mysql_real_escape.

Das ist ein anderes Problem und hat nichts mit dem DBMS zu tun, sondern mit der Kommunikation zwischen Browser und Webserver. Wenn ein Formular abgesendet wird, orientiert sich der Browser bei der Kodierung der Zeichen an der Kodierung der Seite, in der das Formular enthalten war. Mit dem Attribut accept-charset des form-Elements kann man gezielt festlegen, welche Kodierung man wünscht, aber das behandeln nicht alle Browser wie vorgesehen.

Alles klar.

Wenn Daten in die URL direkt eingegeben werden, hat der Browser keinen Anhaltspunkt, welche Kodierung er verwenden soll. Er hat keine Response vorliegen, die irgendeinen Bezug zu der Eingabe hat, an der er sich orientieren könnte. Er kann auch nicht vorab den Server befragen, welche Kodierung er zu dieser URL gern hätte, denn die Eingabe gehört schließlich zur URL und eine andere Zeichenkodierung ergibt eine andere URL. Es gibt auch keinen Standard, der da was regelt. Das heißt, du musst theoretisch mit allen Zeichenkodierungen rechnen.

Das heißt, alle URL-Angaben werden erstmal als ASCII interpretiert?

Nein, das ist in einigen Fällen korrekt, aber nicht für alle Browser und alle Konfigurationen. Es ist auch nicht zweifelsfrei möglich, aus einem String die Kodierung abzuleiten.

Diese URL kommt von einer anderen Website, die die gegebene Website aufruft. Ich kann auf der anderen Seite einstellen, wie die URL aus zu sehen hat. Kann ich das gleich so einstellen, dass eine utf8-Kodierung vorliegt?

Grüße, JN

--
ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)
http://www.johny7.de