| 

.NET C# Java Javascript Exception

3
Was muss ich einstellen, damit mein HTML-Dokument vom Webserver als UTF-8 ausgeliefert und auch so im Browser erkannt wird? Wie hängt der MIME-Type bzw. Content-Type HTTP-Header damit zusammen?
27.08.2009
rover 275 1 2 4
5 Antworten
5
Ich bin jetzt mal etwas spitzfindig und behaupte das es keine Möglichkeit gibt, um den Webserver zu zwingen eine Datei in einer bestimmten Kodierung auszuliefern. Der Server liefert die Datei immer so aus wie sie IST.
Wenn du eine HTML-Seite also als UTF-8 ausliefern möchtest, dann muß sie zuallererst UTF-8-kodiert auf dem Server vorliegen (ohne BOM).
Damit der Client (Browser) jetzt weiß wie er die ankommende Datei behandeln muß, kannst du, wie von klaus_b beschrieben ein Meta-Tag verwenden, oder beim Ausliefern (z.B. in PHP) explizit einen Header
"Content-Type: text/html; charset=utf-8"
setzen. Header und Meta-Tag können parallel verwendet werden, sollten sich jedoch nicht widersprechen.
Die Angabe des Header macht z.B. dann Sinn, wenn Dateien ausgeliefert werden die keine Möglichkeit eines Meta-Tag haben. Z.B. bei einer per PHP generierten und in UTF-8 kodierten Javascript-Datei:
"Content-Type: text/javascript; charset=utf-8"

Nochmal konkret: Die Angabe des Meta-Tag oder Headers zwingt den Server NICHT zu einer Umkodierung! Es ist lediglich ein Hinweis für den Browser WIE die Datei (oder der Byte-Stream) zu behandeln ist.
28.08.2009
FalkP 3,3k 3 8
FalkP 3,3k 3 8
2
Es gibt 3 Möglichkeiten einen Content-Typ festzulegen:
1. im HTTP-Header
2. der XML Deklaration bei XHTML (<?xml version="1.0" encoding="UTF-8"?>)
3. Meta-Tag des Documents (<meta http-equiv="content-type" content="text/html; charset=utf-8" />)

Bei ersterem gibt es wiederrum mehrere Möglichkeiten:
1. in PHP über die Funktion "header('Content-Type: application/xhtml+xml;charset=utf-8');" (dabei darf vorher keine Content-Ausgabe erfolgt sein
2. über eine .htaccess Datei (siehe auch http://www.w3.org/International/questions/qa-htaccess-charset)

In die .htaccess Datei schreibt man dann zum Beispiel:
AddCharset UTF-8 .html

Damit werden alle Dateien mit der Endung .html als UTF-8 ausgeliefert.

Oder auch...
<Files "example.html">
AddCharset UTF-8 .html
</Files>

...um eine einzelne Datei in UTF-8 auszuliefern.

Bitte beachte aber, dass unabhängig von der Content-Typ Angabe, die Daten dann auch in UTF-8 Zeichen vorliegen müssen, sonst wird das falsch dargestellt.

Um das ganze analysieren zu können bietet sich zum Bsp. http://www.validome.org an - dort auf "erweiterte Einstellungen" und "Headerdaten anzeigen" anhaken anklicken. Dann bekommt man den Seitenheader angezeigt und auch woher die Content-Typ Angaben gezogen werden.

Grüßle
18.12.2009
Scout 1,4k 2 8
Möglichkeit 2 ist optional, da UTF-8 ohnehin der default ist, und die XML Deklaration nur bei XHTML existiert.
Die erste Möglichkeit ist optional; wenn dort ein Zeichensatz gesetzt ist, hat der Vorrang gegenüber 2 und 3.
Die dritte Möglichkeit ist ein MUSS für HTML (nicht XHTML) Dokumente.
BeachBlocker 18.12.2009
1
"Was muss ich einstellen, damit mein HTML-Dokument vom Webserver als UTF-8 ausgeliefert und auch so im Browser erkannt wird?"
Das erreichst du mit einem meta http-equiv Tag. Hier der Tag für UTF-8:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />


"Wie hängt der MIME-Type bzw. Content-Type HTTP-Header damit zusammen?"
Mit dem Mime-Type wird der Inhalt der aktuellen Anforderung festgelegt damit der Client, also der Browser, weiß was da kommt. Wenn du z.B. mime-Type image/jpg übermittelst, macht es keinen Sinn das Jpeg mit UTF-8 zu codieren.

Ich hoffe ich habe deine Frage richtig verstanden.

Servus,
Klaus
27.08.2009
klaus_b 1,6k 3 7
klaus_b 1,6k 3 7
Das meta tag wird von vielen Browsern ignoriert, wenn ein content-type HTTP Header gesetzt ist. Trodzdem ist das meta tag wichtig, wenn das Dokument z.B. auf Platte gespeichert wird und später wieder geladen wird.
Zusätzlich muss aber der HTTP Header so gesetzt sein, dass er dem meta tag entspricht (text/html; charset=UTF-8), aber zumindest nicht widerspricht (text/html).
BeachBlocker 18.12.2009
0
Die meisten Browser geben der Angabe des Zeichensatz im HTTP Headaer Vorrang vor der Angabe im Dokument. Ich halte das zwar nicht für sinnvoll, aber das ist nur einmal Fakt.

Das heißt, dass der Server ein UTF-8 kodiertes Dokument mit
Content-Type: text/html; charset=utf-8
ausliefern sollte.

Damit ein Dokument aber auch dann noch richtig angezeigt wird, wenn es auf einem anderen Speichermedium (z.B. lokaler Festplatte) gespeichert und später von dort wieder geladen wird, sollte auch innerhalb des Dokuments der Zeichensatz richtig gesetzt sein. Z.B.
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
und bei XHTML Dokumenten auch noch
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html ...

Wenn man auf einen Server statische HTML-Dokumente unterschiedlicher Kodierung zur Verfügung stellt, bei denen man die HTTP-Header nicht individuell setzen kann, dann empfielt sich das Weglassen des Zeichensatz im Header! Also z.B.
Content-Type: text/html
. Die Browser nehmen dann denn Zeichensatz wie im Dokument angegeben.
17.12.2009
BeachBlocker 617 3
-1
Ich bin jetzt mal etwas spitzfindig und behaupte das es keine Möglichkeit gibt, um den Webserver zu zwingen eine Datei in einer bestimmten Kodierung auszuliefern. Der Server liefert die Datei immer so aus wie sie IST.
Und ich behaupe super-sonder-spitzfindig, das ich durchaus meuinem Webserver sagen kann, was er wie ausliefern soll. Ob es Sinn macht, ein Bild als plain/text auszuliefern mal aussen vorgelassen, kann ich in meinem apache in der httpd.conf und in meinem IIS in der Metabase konfigurieren worauf ich gerade Lust habe ...
07.09.2009
weed 1 1 1
3
Ja sicher kannst du deinem Webserver sagen was er mit welchem MIME oder Content-Type / Charset ausliefern soll. Aber dein Webserver wird sich einen Sch... darum kümmern und die Inhalte trotzdem so ausliefern wie sie SIND und einfach nur mit einem anderen (mglws. unpassenden) Header versehen! Nur weil der Webserver eine Textdatei mit image/jpeg versieht wird daraus kein Bild und nur mit einem anderen Header wird aus ISO-8859-1 kein UTF-8. Dazu müßte es der Server UMKODIEREN.
FalkP 16.09.2009

Stelle deine Html-Frage jetzt!