dedlfix: string in uft-8 umwandeln

Beitrag lesen

echo $begrüßung;

Weiter will ich einen string in eine MYSQL DB schreiben am besten schon als uft-8 - String. er kommt aus einer multiple-select-box und wurde aus einer asci-datei leistungen.csv eingelesen:

Ein sehr komplexes Thema, weil es hier viele verschiedenen Stellen zum Fehlermachen gibt. Ich werde es nur im Groben anreißen, da man damit ganze Tutorials füllen kann. Außerdem gehe ich davon aus, dass du einen MySQL-Server in Version 4.1 oder höher verwendest.

Als erstes gilt es das Kapitel Character Support zu lesen und zu verstehen, an welchen Stellen man überall Zeichenkodierungen einstellen kann, und wo automatisch Umwandlungen vorgenommen werden. Für letzteres ist besonders das Kapitel Connection Character Sets and Collations wichtig und auch das Statement "SET NAMES ...". (Das Teilthema Collation ist dabei nichts so interessant, dabei geht es nur um richtige Sortierung.)

Als nächstes kommen die eingeschränkten oder kaum vorhandenen Fähigkeiten PHPs (kleiner als Version 6) hinzu, Strings in Mehrbyte-Zeichenkodierungen zu verarbeiten. Zumindest das Umwandeln von ISO-8859-1 (MySQL sagt latin1 dazu) nach UTF-8 und zurück funktioniert[*].

Und außerdem kommt noch die Kodierung der Webseite hinzu, und das was die Browser dabei anstellen.
Die Kodierungsangabe im HTTP-Header ist dabei die ausschlaggebende, wenn sowohl sie als auch eine Ersatz-Angabe in einem HTML-Meta-Element vorhanden ist.
Verwendet man eine Kodierung, die ein bestimmtes vom Anwender eingegebenes Zeichen nicht enthält, senden manche Browser eine Ersatzdarstellung in Form eines HTML-Entities &#x...; Das lässt sich leider nicht von einer gewollten Eingabe des Anwenders unterscheiden. Gut, das kommt nicht so häufig vor, ist aber trotzdem unschön.

echo "$verabschiedung $name";

[*] Natürlich mit den technisch bedingten Einschränkungen. Zeichen, die mit ISO-8859-1 nicht darstellbar sind, gehen bei einer Wandlung von UTF-8 nach ISO-8859-1 verloren.