gelöschter Benutzer
Umstellung auf UTF-8
Hallo,
nachdem ich mit Hilfe von Seitenreport die Seite unserer Schule doch schon sehr optimiert habe, hänge ich noch immer an einem Punkt. Dies ist, die Umstellung vom ISO auf UTF-8 Zeichensatz. Der Content wird wunderbar übernommen, wir haben keine CSS-Probleme und Formulardaten werden korrekt übernommen.
Im Head-Bereich jedoch bzw. in einem Tag-Attribut, werden die Umlaute der deutschen Sprache nicht angenommen und HTML-Entities funktionieren ja auch nicht in Attributen.
Ich hoffe jemand hat eine Lösungsidee?
MfG
joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
Chance
Programmierer
Guru (173 Beiträge)
Schaltkreis schrieb:
und HTML-Entities funktionieren ja auch nicht in Attributen.
Sicher ?
UFOMelkor
Student
Content Meister (350 Beiträge)
Hallo Jürgen,
wenn du die Seite mit dem Validator parst, erhälst du u.a. folgende Ausgabe:
Validator schrieb:
Encoding: iso-8859-1
Wenn du dem Validator UTF-8 als Vorgabe gibst, kann er die Seite nicht parsen, weil er unbekannte Zeichen findet (Opera meldet den selben Fehler wenn man UTF-8 erzwingt).
Zuerst solltest du dir überlegen, ob du die Seite wirklich nach UTF-8 konvertieren möchtest. Eine Seite nachträglich nach UTF-8 zu konvertieren bringt meistens ein paar Komplikationen mit sich und der Vorteil hält sich für rein deutschsprachige Seiten in Grenzen.
Wenn du deine Seite immer noch konvertieren möchtest, solltest du zuerst den Charset der Datei ändern.
Bei der XML-Dekleration solltest du den Charset auf UTF-8 stellen:
[html]<?xml version="1.0" encoding="UTF-8" standalone="no"?>[/html]
Alternativ kannst du sie auch weglassen, wenn du UTF-8 verwendest. Da die XML-Dekleration Probleme bei allen Versionen des Internet Explorer kleiner 7 verursacht, würde ich dir dazu auch raten.
Zudem solltest du den Header noch ändern mit folgendem PHP-Befehl:
<?php
header(\'Content-Type: application/xhtml+xml; charset=utf-8\');
Den Internet Explorer 6 musst du allerdings gesondert behandeln, da er beim Content-Type application/xhtml+xml einen Download-Dialog benötigt. Ihm solltest du folgenden Header schicken:
<?php
header(\'Content-Type: text/html; charset=utf-8\');
Das ist dann natürlich nicht mehr korrekt, aber das muss man in Kauf nehmen, wenn man XHTML 1.1 für den Internet Explorer 6 ausgeben möchte.
Ob der Browser den Content-Type application/xhtml+xml unterstützt, kannst du mit der Variable $_SERVER[\'HTTP_ACCEPT\'] herausfinden.
Einen Artikel dazu findest du hier: http://meiert.com/de/publications/articles/20041004/
Der von Jörg vorgeschlagene Meta-Tag bringt leider nicht viel, kann bei XHTML 1.1 in einigen Browsern sogar zu Problemen führen.
Nachdem das ganze nun als UTF-8 ausgegeben wird, muss man noch den Inhalt nach UTF-8 konvertieren. Wenn die Seiten alle im Filesystem liegen, ist es relativ einfach. Die Dateien als UTF-8 speichern und dann die Sonderzeichen zu erstzen.
Schwieriger wird es, wenn die Daten in der Datenbank liegen. Du müsstest die Datenbank auf UTF-8 umstellen (und die Daten darin natürlich auch) und direkt nach dem Verbinden zu MySQL folgendes ausführen:
<?php
mysql_query("SET NAMES \'utf8\'");
Die Daten sollten dann alle in UTF-8 vorliegen und nicht mehr in ihre Entities umgewandelt werden müssen.
HTML-Entities sollten auch in den Tag-Attributen funktionieren. Wenn du allerdings nur alle Daten in Entities und die Formatierung auf UTF-8 umstellst, dann hast du in der Datenbank zwei Charsets enthalten, das kann zu Problemen führen.
Naturkosmetik in Bochum
Steppenhahn Ultramarathon-Community
gelöschter Benutzer
Ja Browserweiche für XHTML 1.1 ist schon eingebaut. Nur die, die auch wirklich XHTML können kriegen application/xhtml, IE5, 5.5 und 6 werden schon lange mit text/html gefüttert. Dass <?xml version="1.0" encoding="UTF-8" standalone="no"?> Probleme verursachen würde, weiß ich auch.
Das Meta-Tag mit content-type hatten wir früher eingebaut, haben es dann aber lieber durch <?xml ersetzt.
Der letzte Teil der Antwort hat mir dann den wichtigen Punkt gezeigt. Ich habe einfach vergessen, die Dateien als UTF-8 zu kodieren und die Datenbank ist auch nicht UTF.
Ein Kracher....75 PHP dateien und die ganze Datenbank nach UTF-8 konvertieren ist mir aktuell ein wenig zu viel Arbeit. Trotzdem danke für den Tipp. Eventuell habe ich ja mal einen freien Tag mit viel Langeweile. Die Frage bleibt immer wozu man es eigentlich tun sollte.
MfG
PS: Also wenn ich bei <meta name="geo.placename" content="Dahlwitzer Straße aus dem ß ein ß mache, dann wird das ß ja an dieser Stelle angezeigt im Quelltext, so wie jedes andere Entity auch. Woher weiß man nun, was die Suchmaschine an der Stelle interpretiert?
Das Seitenreport Forum hat aktuell 5275 Themen und 36110 Beiträge.
Insgesamt sind 48360 Mitglieder registriert.
Beitrag erstellen
EinloggenKostenlos registrieren