Verständnisproblem bei utf-8 und Sonderzeichen
hbergmann
- html
Hallo,
als langjähriger und erfahrener Autodidakt im Bereich der Webprogrammierung stoße ich bei der Zeichenkodierung an Verständnisgrenzen. Vielleicht könnt ihr mir helfen.
Erstmal eine ganz einfache (Doppel-)Frage, auf die ich in den Archiven aber bisher keine Antwort gefunden habe.
Sind im Zeichensatz utf-8 auch alle deutschen Sonderzeichen enthalten? Und wenn ja, warum zeigt dieser Quellcode in den Standarbrowsern die Sonderzeichen nicht an, sondern zeigt ein weißes Fragezeichen in einer schwarzen Raute:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
Lauter Umlaute und Sonderzeichen:
ä ö ü ß é è ê
</body>
</html>
Dieser Quellcode allerdings zeigt die sonderzeichen (erwartungsgemäß) an:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body>
Lauter Umlaute und Sonderzeichen:
ä ö ü ß é è ê
</body>
</html>
PS: bei einer komplexen Datenbank-Anwendung (mysql) habe ich alle Daten im Zeichensatz utf-8 gespeichert. Die HTML-Datei sendet den Header mit dem Zeichensatz utf-8 (s.o.). Zusätzlich sende ich diesen Header auch über eine header-Anweisung in der php-Datei. Das Interessante ist, dass auch alle Sonderzeichen der Datenbank-Daten korrekt angezeigt werden. Alle im Quelltext enthaltenen Sonderzeichen jedoch werden mit einem weißem Fragezeichen in einer schwarzen Raute dargestellt. Ich möchte jetzt ungern wieder an den ganzen Quelltext und jedes Sonderzeichen in die HTML-Entsprechung (bspw. ä
) umschreiben. Gibt es da eine Chance?
LG
hbergmann
Es kommt drauf an in welcher Codierung du den Quelltext abspeicherst.
Dein Editor sollte dazu eine Einstellung bieten. Ein ä unter uft-8 wird als was anderes abgespeichert als unter ISO.
Wenn du im Editor mit ISO arbeitest, zeigt der dir die Zeichen so an wie du sie eingibst. Wenn du das dann zum Browser schickst (in ISO-Codierung) und dann aber dazu sagst dass es uft-8 ist, dann kommt da was falsches raus.
Danke! Danke!
Auf die Idee, dass ich UltraEdit anweisen soll, die Datei im UTF-8 Format zu speichern (!), bin ich echt noch nicht gekommen. Da also war die Kette schon ganz am Anfang falsch aufgefädelt! Es sind die kleinen Dinge, die man als Autodidakt nicht weiß!
Danke für den Tip!
LG hbergmann
Hi,
Sind im Zeichensatz utf-8 auch alle deutschen Sonderzeichen enthalten?
UTF-8 ist kein Zeichensatz, sondern eine Zeichenkodierung.
Und ja, natürlich sind deutsche Umlaute enthalten.
Und wenn ja, warum zeigt dieser Quellcode in den Standarbrowsern die Sonderzeichen nicht an, sondern zeigt ein weißes Fragezeichen in einer schwarzen Raute: [...]
Dieser Quellcode allerdings zeigt die sonderzeichen (erwartungsgemäß) an:
Dann hast du entweder das erste Dokument nicht als UTF-8 gespeichert, oder der Server macht eine abweichende Angabe zur Zeichenkodierung der Ressource.
Die HTML-Datei sendet den Header mit dem Zeichensatz utf-8 (s.o.).
Nein, macht sie nicht - sie enthält lediglich niedriger priorisierte Äquivalent eines HTTP-Headers.
Das Interessante ist, dass auch alle Sonderzeichen der Datenbank-Daten korrekt angezeigt werden. Alle im Quelltext enthaltenen Sonderzeichen jedoch werden mit einem weißem Fragezeichen in einer schwarzen Raute dargestellt.
Dann hast du das Dokument wohl wirklich nicht korrekt als UTF-8 abgespeichert.
MfG ChrisB
Dann hast du das Dokument wohl wirklich nicht korrekt als UTF-8 abgespeichert.
Danke auch für deine Tipps zum Verständnis und zum Sprachgebrauch. Grundlegend habe ich das Problem erkannt und kann mir eine Lösung vorstellen. Allerdings bemerke ich jetzt einige Schwierigkeiten / Fragen in der Umsetzung.
Ich habe bisher alle Projektdateien ohne nachzudenken einfach immer schön mit meinem Editor (UltraEdit v13) über ftp direkt auf dem Server geöffnet und abgespeichert - wie mir jetzt auffällt war der Übertragungsmodus auf binär gestellt. Beim Öffnen wurde ich regelmäßig gefragt, ob ich die Datei ins DOS_Format konvertieren wolle, was ich immer bestätigt habe und dann weiter daran arbeitete.
Das meiste der HTML-Darstellung funktioniert über template-Dateien, die eingebunden werden - darin ist reiner HTMl-Code enthalten mit Platzhaltern, die durch Datenbank- und Programm-Content ersetzt werden. Jetzt habe ich begonnen, diese template-Dateien von ASCII nach UTF-8 zu konvertieren und so abzuspeichern. Die Ausgabe funktioniert damit korrekt. So weit so gut.
Allerdings habe ich das auch mit einer php-Datei versucht - da ein wenig (sehr wenig) Content auch über hardgecodete Ausgaben generiert wird. Nach der Konvertierung gab es Fehlermeldungen, dass bereits ab Zeile 1 ein output gesendet werde, was meinem Programm so nicht gefällt.
In welcher Kodierung sollte man php-Dateien abspeichern? Gibt es da Empfehlungen?
LG hbergmann
Hi,
Ich habe bisher alle Projektdateien ohne nachzudenken einfach immer schön mit meinem Editor (UltraEdit v13) über ftp direkt auf dem Server geöffnet und abgespeichert - wie mir jetzt auffällt war der Übertragungsmodus auf binär gestellt. Beim Öffnen wurde ich regelmäßig gefragt, ob ich die Datei ins DOS_Format konvertieren wolle, was ich immer bestätigt habe und dann weiter daran arbeitete.
Das hat nichts mit der Zeichenkodierung zu tun, sondern nur mit den unterschiedlichen Zeilenumbruch-Formaten zwischen unterschiedlichen Betriebsystemen - Modus ASCII konvertiert diese bei der Übertragung, BINÄR nicht.
Allerdings habe ich das auch mit einer php-Datei versucht - da ein wenig (sehr wenig) Content auch über hardgecodete Ausgaben generiert wird. Nach der Konvertierung gab es Fehlermeldungen, dass bereits ab Zeile 1 ein output gesendet werde, was meinem Programm so nicht gefällt.
“Headers already sent” o.ä. meinst du wohl.
Das liegt dann in diesem Falle wohl an der BOM.
In welcher Kodierung sollte man php-Dateien abspeichern?
UTF-8 ohne BOM.
MfG ChrisB
“Headers already sent” o.ä. meinst du wohl.
Das liegt dann in diesem Falle wohl an der BOM.
Stimmt! Ich hatte in Unkenntnis in UltraEdit die Option belassen (?), dass ein BOM (danke, jetzt weiß ich auch, was das ist (: ) vorgestellt wird.
In welcher Kodierung sollte man php-Dateien abspeichern?
UTF-8 ohne BOM.
Mal sehen, ob ich das so einstellen kann. Ich merke gerade einfach, dass man Zeichenkodierung sehr früh zu Beginn eines Projektes abklären muss und konsequent beachten muss. Mein Projekt ist so weit gediehen, dass das nochmal zu tief eingreifen würde und zu vielen Problemen führt. Also doch einfach den Kauderwelsch per str_replace umwandeln und das nächste Mal von Anfang an alles besser machen.
Danke für die Hilfe und die ersten Einsichten in diese komplexe Thematik!
LG hbergmann
@@hbergmann:
nuqneH
Danke für die Hilfe und die ersten Einsichten in diese komplexe Thematik!
In diesen Artikeln findest du weitere Einsichten.
Qapla'