Doch wozu ist das nötig?
Umlaute und Sonderzeichen werden nicht richtig dargestellt.
Es gibt viele verschiedene Zeichen-Kodierungen, die unterschiedliche
Normungen haben. Doch viele dieser Zeichensätze haben das Problem, daß
sie nur eine bestimmte
Menge an Teilmenge der auf der Welt bestehenden Zeichen darstellen
können.
Die meisten (deutschen) Webseiten sind derzeit mit iso-8859-1 kodiert.
Das reicht für gewöhnlich aus, wenn man deutsche Seiten schreiben will,
denn
dieser Zeichensatz umfaßt alle Buchstaben, Zahlen und Sonderzeichen der
deutschen Sprache.
Doch was macht man, wenn man nun z.B. chinesische Zeichen schreiben muß
Diese sind nicht im iso-8859-1 Zeichensatz vorhanden. Hier kommt
UTF-8 ins Spiel, denn mit UTF-8 ist es möglich, die Zeichen jeder
Sprache zu schreiben.
Bestehende Seiten umwandeln:
Unter Linux kann man beliebige Dateien
mit einem Befehl von iso-8859-1 in UTF-8 umkonvertieren.
Dazu wechselt man in das Verzeichnis wechseln, in dem die Webseite liegt
und gilbt folgenden Befehl ein:
find . -name '*.php' -exec recode latin1..u8 {} \;
Je nachdem, ob noch
Dateien mit anderen Extensions existieren, ist das
.php durch
.html,
.xhtml usw. ersetzen.
ACHTUNG: Nie Extensions von Binärdateien, wie z.B. Bildern, Videos usw.
angeben. Diese so hiermit zerstört.
Soll von einem anderen
Dateiformat als
ISO-8859-1 zu
UTF-8
konvertieren werden, ist in der Manualpage von "recode"
nachzuschauen.
!!! Die Konvertierung darf nur 1x durchgeführt
werden. Wird das Kommando auf Files angewendet, die bereits nach UTF-8
konvertiert wurden,
werden die Sonderzeichen zu "irgend etwas" umgesetzt !!!
Korrekten Meta-Tag setzen:
Damit die Browser wissen, welche Kodierung die Internetseite verwendet,
gibt es ein bestimmtes Meta-Tag. Bei ISO-8859-1 lautete dies:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
Dieses mu?nun ersetzt werden durch:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Das muß auf jeder Seite gemacht werden, wo dieses
Meta-Tag enthalten ist!
MySQL-Datenbestand auf UTF-8 umstellen:
Damit man sich nicht die Mühe machen muß alle Datenbestände manuell
konvertieren zu müssen, kann man dieses Script benutzen:
| <?PHP $hostname = "localhost"; // Standard $database = "Datenbank-Name"; // ändern $username = "Benutzername"; // ändern $password = "Passwort"; // ändern mysql_connect($hostname, $username, $password); mysql_query("ALTER DATABASE $database DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci"); $res = mysql_query("SHOW TABLES FROM $database"); while($row = mysql_fetch_row($res)) { $query = "ALTER TABLE {$database}.`{$row[0]}` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"; mysql_query($query); $query = "ALTER TABLE {$database}.`{$row[0]}` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci"; mysql_query($query); } ?> |
MySQL-Datenbank anweisen, UTF-8 auszuliefern:
Selbst wenn der Datenbestand nun in UTF-8-Kodierung vorliegt, liefert die Datenbank die Daten noch anders kodiert aus. Hier muß man der Datenbank sagen, wie sie die Daten ausliefern soll.
Dazu schickt man den Befehl :
SET NAMES 'utf8';
an die Datenbank und alles klappt wunderbar. Wenn man z.B. eine PHP-Datei für den Verbindungsaufbau zur Datenbank hat, empfiehlt es sich, diesen Befehl direkt nach Aufbau der Verbindung zu senden:
<?PHP mysql_query("SET NAMES 'utf8'"); ?>
Editor mit UTF-8-Unterstützung benutzen:
Alle diese Maßahmen nützen nichts, wenn man einen Editor benutzt, der keine Unterstützung für UTF-8 hat. Wenn man nun etwas an einer Seite ändert oder neue Seiten erstellt, müssen diese
auch wieder im UTF-8-Format abgespeichert werden.
Frontpage 2002 / 2003 anweisen ein Dokument als UTF-8 abzuspeichern:
Jedes Dokument, das <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> enthält , wird von FrontPage 2002 als UTF-8 verarbeitet. Das gilt auch, wenn es Byte-Sequenzen enthält, die in UTF-8 ungültig sind. Solche fehlerhaft codierte Zeichen erscheinen als ? im Quelltext.
Ohne meta-Element schaltet FrontPage stets auf Windows-1252. (Sie können dies anhand der Schriftart in der HTML-Ansicht erkennen; bei Windows-1252 wird eine Festbreitenschriftart verwendet, bei Unicode-Codierungen eine serifenlose Schriftart.)