Zeichenkodierung in MySQL-Datenbank
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
code
darstellung
datei
datenbank
fragezeichen
hauptsache
http
idee
manual
problem
set
sonderzeichen
tabelle
unbekanntes symbol
url
vergessen
versuch
zeichen
zeitpunkt
zweifelsfall
-
Hallo,
ich habe derzeit ein Problem mit der Darstellung von Zeichen auf einer Homepage, die ich erstellt habe. vor einigen Wochen habe ich die Seite auf utf-8 umgestellt.
Allerdings ist es schon eine Weile her, dass ich die Homepage erstellt habe und zu diesem Zeitpunkt hatte ich mir noch NULL Gedanken zum Thema Zeichenkodierung etc. gemacht.
Daher ist es nun so, dass die MySQL-Datenbank lange Zeit in eigentlich allen Spalten die Zeichenkodierung latin1_general_ci enthielt.
Meinen damaligen Programmierkünsten ist es nun auch zu verdanken, dass einige Datensätze, die in die Tabelle eingefügt wurden, zuvor nicht über die PHP-Funktionen htmlspecialchars() bzw. htmlentities() so bearbeitet worden sind, dass die Sonderzeichen gegen die entsprechenden Html-Entities (& ä ü ß etc.) ersetzt worden sind.
Ich habe also in manchen Datensätzen der Datenbank tatsächlich ein "ä" oder ein "ü" stehen, in anderen stattdessen "ä" und "ü".
Allerdings sollte es nun doch eigentlich so sein, dass, wenn ich sowohl in den Datenbankzellen als auch im PHP-Skript-Header also auch im <meta>-Tag der Seite überall die utf-8 Kodierung angegeben habe und auch die *.php-Dateien im utf-8 Format gespeichert habe, diese Zeichen dann - auch ohne Umwandlung in die entsprechenden Entities - richtig auf der Seite angezeigt werden müssten, oder nicht?
Bei mir ist dies nicht der Fall - jedes Mal, wenn ich Zeichen aus der Datenbank erhalte, in denen die Sonderzeichen nicht als HTML-Entities vorlegen, werden diese als Fragezeichen, also "unbekanntes Symbol" dargestellt.
Jemand eine Idee, wie sich dies ändern ließe? Im Zweifelsfall eine idee, wie ich evtl. die Daten in der DB nachträglich automatisiert anpassen könnte?
Meine Einstellungen nochmal in Kürze
- *.php Dateien, sowie alle, die in diese includiert werden, sind als UTF-8 kodiert gespeichert - header('Content-type: text/html; charset=utf-8'); zu Beginn jeder Seite - utf8_general_ci als Spaltentyp in den MySQL-Tabellen - <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" > am Anfang jeder Seite
Zu sehen ist das Problem bspw. unter http://www.amg-abi08.de/?seite=home&zeige=alle bei den älteren, d.h. unten befindlichen news.
Vielen Dank, -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Versuch mal bevor du etwas in die Datenbank einträgst/ausliest:
$query = "SET NAMES 'utf8'"; mysql_query($query);
Oder so http://www.php.net/manual/de/function.mysql-set-charset.php
Aber ich denke die alten Einträge wirst du vergessen können...
Beitrag zuletzt geändert: 3.3.2010 10:32:06 von fr3z3r -
Du kannst ja ein Script alle Datenbankeinträge durchgehen und mit html_entity_decode evtl. vorhandene Codierte Zeichen dekodieren und dann mit htmlentities wieder codieren und in der datenbank dann aktualisieren.
So würde ich es machen -
fr3z3r schrieb:
Versuch mal bevor du etwas in die Datenbank einträgst/ausliest:
$query = "SET NAMES 'utf8'"; mysql_query($query);
Oder so http://www.php.net/manual/de/function.mysql-set-charset.php
Aber ich denke die alten Einträge wirst du vergessen können...
Vielen Dank - funktioniert einwandfrei; Dass zusätzlich also auch noch der Typ der Verbindung auf utf8 gesetzt werden muss, war mir neu, aber jetzt ist alles so wie es soll.
Okay, die Darstellung der Sonderzeichen in der DB ist nun etwas inkonsequent, aber da werde ich mir ja zur Not, wie thomasba schon sagte, mit html_entity_decode helfen können. Hauptsache, es wird erstmal alles wieder korrekt angezeigt :)
Gruß, -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage