Webseite erfolgreich auf UTF-8 umstellen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abstellen
bit
code
datei
datenbank
datenverlust
datum
editor
einspielen
genannte methode
grund
http
konvertieren
output
problem
session
standard
umstellung
url
zeichen
-
Hallo,
Ich würde gerne eine Webseite vom iso-8859-1 Standard zum UTF-8 Standard umrüsten.
Bis vor kurzem habe ich noch einen Editor genutzt, welche kein UTF-8 unterstützt.
Jetzt nutze ich Notepad++.
Zuerst habe ich in Notepad++ folgendes gemacht:
Format >> Konvertiere zu UTF-8
Dann habe ich die "alte" Zeile durch diese neue ersetzt:
<meta http-equiv="content-type" content="text/html; charset=utf-8">
Dann habe ich in die CSS-Datei folgendes geschrieben:
@charset "utf-8";
Dann habe ich mein Formular um folgendes Attribut ergänzt:
accept-charset="utf-8">
Blöderweise erhalte ich jetzt oben die Fehlermeldung:
und so weiter...Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at
Woran liegts und wie kann ich das beheben?
Habe ich was vergessen oder falsch gemacht?
Was muss ich an der MySQL-Datenbank verändern?
Ich hoffe ihr könnt mir helfen.
Beitrag zuletzt geändert: 1.9.2009 15:23:57 von zerojan -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das liegt am BOM. Das musst du abstellen. Das sind im Prinzip einige Bytes, die dazu da sind zu zeigen, dass es sich bei der Datei um eine UTF-8 Datei handelt. Es kann aber auch problemlos abgeschaltet werden. Es wird trotzdem als UTF-8 gelesen.
http://de.wikipedia.org/wiki/Byte_Order_Mark
Problem ist, dass diese drei Bytes schon gesendet wurden, session_start() aber schon ganz am Anfang stehen muss, bevor dem Browser irgendentwas gesendet wird.
Wichtig wird es erst bei UTF-16 oder UTF-32, da dann nichtmehr 8 Bit ein Zeichen codieren, sondern 16 oder 32 Bit
Beitrag zuletzt geändert: 1.9.2009 16:10:11 von reimann -
Danke!
Vielen Dank für deine Hilfe.
Hat geklappt.
Gibt es noch etwas bei der Umstellung zu beachten? -
Hi,
es könnte auch sein, dass die Datenbankverbindungen vor deinem session_start() machst und dort jetzt eine Fehlermelung ausgegeben wird... am Besten du schreibst session_start() erstmal vor alles andere... also auch vor require(), include() usw.
Außerdem mußt du der Datenbank mitteilen, dass deine Zeichen die du empfangen willst, du jetzt gerne in utf-8 haben magst.
Dazu schreibst du hinter jedem mysql_connect()
bei PHP < 5.2:
<? mysql_query("SET NAMES 'UTF-8'"); ?>
ab PHP 5.2.3:
<? mysql_set_charset('UTF8', $link); ?>
Damit deine Daten in der Datenbank dann allerdings einheitlich sind (also bis jetzt latin1 und ab jetzt utf8) müsstest du die Daten auch konvertieren. Dazu am Besten ein Dump ziehen und als export zeichensatz utf-8 angeben. Danach die Datei wieder einspielen
Um dir keine Daten zu verlieren würde ich das allerdinsg erstmal in eine NEUE Datenbank einspielen und schauen ob alles so stimmt.
So bist du vor Datenverlust sicher.
Grüßle -
@ scout
Ich habe in phpMyAdmin die Tabellen Kollation auf utf8_unicode_ci umgestellt.
Ist das richtig so?
Ist die von dir genannte Methode immer nötig?
Und was bewirkt deine oben genannte Lösung genau? Das ist mir noch nicht ganz klar.
Beitrag zuletzt geändert: 1.9.2009 16:56:31 von zerojan -
zerojan schrieb: @ scout
Ist das richtig so?
Jain, dieser Wert hat nur noch Einfluss auf zum Bsp. Sortierreihenfolge usw. allerdings NICHT auf die Daten selbst.
Du mußt dir vorstellen...Latin1 benötigt zum Speichern 1 Zeichenbreite...utf8 hingegen 2 Zeichenbreiten
Die Kollation ist richtig, nur die Daten dann nicht mehr - diese werden nicht mitgeändert Aus diesem Grund hilft da nur Daten Dumpen und neu einspielen.
zerojan schrieb: @ scout
Ist die von dir genannte Methode immer nötig?
Naja kommt ganz drauf an wie CLEAN du die ganze Sache haben willst... ich hab durchaus auch Kunden denen langt es utf-8 Daten in eine latin1 Datenbank zu füttern. Solange das Verfahren hinten dran zum Auslesen der Daten das gleiche bleibt, wird dabei auch kein Problem auftreten. Wird hingegen später ein neues externes Programm geschrieben, dass die Daten anders abruft bzw. speichert, gibts dann ein Problem.
Aus diesem Grund mach ich mir die Mühe über "mysqldump --default-character-set=utf-8 ..." und importiere diese neu.
siehe auch: http://dev.mysql.com/doc/refman/5.1/de/mysqldump.html
zerojan schrieb: @ scout
Und was bewirkt deine oben genannte Lösung genau? Das ist mir noch nicht ganz klar.
Dass die Zeichen in der Datenbank auch UTF-8 Zeichen sind und keine Latin1 Zeichen.
Grüßle
Beitrag zuletzt geändert: 1.9.2009 17:30:33 von scout -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage