Sven Rautenberg: Zeichensatz ermitteln?

Beitrag lesen

Moin!

Hi,

was dir der browser schickt, ist egal. du tust einfach so, als ob das utf-8 wäre, und gibst es so weiter.

Böse Falle, das. Das führt zu fast 100% zu unvorhersehbaren Ergebnissen, weil eine unglückliche Kombination aus ISO-8859-1-Zeichen durchaus auch gültige UTF-8-Zeichen sein können - nur dann eben komplett andere Zeichen bezeichnen.

Das geht einfach so? Wenn der Browser iso schickt, kann ich doch nicht einfach so tun, als sei es utf-8, das stimmt doch in der brechnung nicht... und außerdem muss doch der gleiche charset auch wieder rausgehen, sonst erscheint beim user ein falsches zeichen, da dieses ja in diesem speziellen fall nicht mit einem html entity codiert werden soll.

Wenn du dem <form> ein accept-charset="UTF-8" mitgibst, dann senden IE 5.5, IE 6.0, Netscape 6.2, Firebird 0.7 und Opera 6 das Formular tatsächlich als UTF-8-codiert ab. Habe ich mich unlängst persönlich von überzeugt (im Zuge von Forschungen für dieses Forum, was ja leider kein Eurozeichen annimmt). Netscape 4 kann das vermutlich nicht - den habe ich nicht getestet.

Was die Zeichensatzangabe angeht: Opera 6 schickt im "content-type" die Zeichensatzangabe mit - als einziger der o.g. Browser. Alle anderen schicken nur "application/x-www-form-data" oder eben "multipart/form-data", ohne Charset-Parameter.

Sofern du _wirklich_ sichergehen willst, wird dir nichts anderes übrig bleiben, als deinen vermeintlichen UTF-8-String auf Gültigkeit zu prüfen. Zumindest ein paar formale Parameter kann man ja testen, wenn man nicht gleich die gesamte definierte Unicodetabelle prüfen möchte. :) Siehe http://de.php.net/manual/en/function.utf8-encode.php, erster Userkommentar, Funktion "seems_utf8()" für 31-bit.

- Sven Rautenberg