Wie man Umlaute korrekt verarbeitet und abspeichert

Das Problem



Mit der Zeit haben sich viele verschiedene Zeichens�tze breitgemacht. G�ngig in Europa ist z.B. der ISO8859-1 (latin1). Um bei Datenbanken aber auch mit anderen Zeichen keine Probleme zu bekommen, sollte man UTF8 w�hlen. Um genau zu sein utf8_unicode_ci und nicht utf8_general_ci oder utf8_bin, damit beim "ORDER BY"-Befehl die Sortierung passt. Allerdings ist utf8_general_ci schneller f�r Vergleiche als utf8_unicode_ci, arbeitet daf�r eben weniger korrekt. Hinzu kommt, dass man bei vielen Hostern (bei mir: Host Europe) keinen Zugriff auf Konfigurationsdateien hat.

Die L�sung

Beim Erstellen der Datenbank muss der richtige Zeichensatz schon ausgew�hlt sein. Man kann ihn aber auch nachtr�glich �ndern, was aber schief gehen kann, wenn bereits Daten in der Datenbank sind.


Anschlie�end muss mittels der header()-Funktion von PHP dem Browser mitgeteilt werden, wie er die Daten zu �ffnen hat.


Bei dem Aufbau der MySQL-Verbindung muss "SET NAMES" definiert werden. L�sst man SET NAMES weg, funktioniert zwar das verarbeiten, abspeichern und anzeigen von Formulardaten problemlos, beim Bearbeiten in PHPMyAdmin und SQL Workbench sieht man in dem Fall aber weiterhin wirre Zeichen.


Zuguterletzt m�ssen im Editor die PHP-Dateien als UTF8 abgespeichert werden. Ich empfehle, durchgängig die Einstellung "UTF8 ohne BOM" zu w�hlen. Unter Umst�nden muss man den Men�punkt nach dem Neuladen eines Dokuments erneut auswählen.


Nicht geholfen hat mir z.B. das Konvertieren von utf8 mittels decode() und encode(); auch der charset-Metatag und ein Eintrag in .htaccess hatten keinen Effekt.

Wenn man alles beachtet, kann man die Umlaute in seinem HTML-Quelltext auch ohne "&auml" schreiben.


Copy 'n' Paste

mysql_query("SET NAMES UTF8");
$db->query("SET NAMES 'utf8'");
header("Content-Type: text/html; charset=utf-8");

Bisher ungetestet: MySQL dumpen und reimportieren
http://blog.loftdigital.com/blog/php-utf-8-cheatsheet
http://www.phptherightway.com/
https://phpbestpractices.org/#utf-8


Quellen
http://www.peterkropff.de/allgemeines/zeichenkodierung/mysql_1.htm
 
© 2005-2015 DerMarki.de by Markus Schiele