Ich habe eine HTML-Seite, die korrekt (die Codierung des physischen Datenträgers stimmt damit überein) den Inhaltstyp anzeigt :
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content=
"text/html; charset=utf-8">
<title> ...
Das Öffnen der Datei von der Festplatte im Browser (Google Chrome, Firefox) funktioniert einwandfrei.
Der Webserver fordert es über HTTP an und sendet einen anderen Content-Type-Header:
$ curl -I http://example.com/file.html
HTTP/1.1 200 OK
Date: Fri, 19 Oct 2012 10:57:13 GMT
...
Content-Type: text/html; charset=ISO-8859-1
(siehe letzte Zeile). Der Browser verwendet dann ISO-8859-1, um anzuzeigen, was ein unerwünschtes Ergebnis ist.
Gibt es eine übliche Möglichkeit, die an den Browser gesendeten Server-Header aus dem HTML-Dokument heraus zu überschreiben?
;charset=...
aus dem http-Header zu entfernen . Die Seite funktioniert sehr gut mitContent-Type: text/html
, verschiedene Dateien haben unterschiedliche Codierungen auf dem Server. (Ich fürchte, das ist auch nicht möglich, weil ich glaube, ich habe das vor einigen Wochen gesucht, aber das Ergebnis war nicht ganz endgültig). Nur für den Fall, dass Sie direkt vor Ihnen Licht ins Dunkel bringen können.Sie sollten so etwas in Ihrem Stammverzeichnis .htaccess festlegen
quelle
Nein, das ist im HTML nicht möglich. Der Antwortheader des Servers hat Vorrang vor dem Meta-Tag des Dokuments. Wie in 5.2.2 angegeben. Angeben der Zeichenkodierung - HTML 4.01 Spezifikation :
Dies erfordert also eine Konfiguration auf der Serverseite. Im weiteren Verlauf des Kapitels:
In meinem Fall enthält der Content-Type- Header des Servers den richtigen MIME-Typ, aber den falschen Zeichensatz .
Wie sich herausstellte, hatte meine Apache-httpd-Konfiguration die Option
AddDefaultCharset
zum Hinzufügen des; charset=ISO-8859-1
Teils aktiviert . Platzieren Sie.htaccess
die folgende Zeile im Stammverzeichnis der Website :Die Zeichensatzinformationen wurden entfernt:
(siehe letzte Zeile, kein
; charset=...
Teil). Dies in Kombination mit dem HTML-Meta-Tag löst aus, dass die Browser-Heuristik den Zeichensatz vom Meta-Tag übernimmt . Die Website ist ordnungsgemäß dekodiert.Getestet mit:
Diese drei Browser hatten Probleme mit der ursprünglichen Konfiguration und funktionieren jetzt (alle unter Fedora 17).
Hatte das Problem überhaupt nicht. Beide bevorzugten UTF-8 aus dem Meta-Tag gegenüber der ISO-8859-1- Einstellung vom Server.
Unterstützt UTF-8 nicht und wählt daher immer Western (Latin1), unabhängig von der Servereinstellung und dem Meta-Tag.
quelle
Zusätzlich zu dem, was hier gesagt wurde, würde ich versuchen, auf allen Seiten den gleichen Zeichensatz zu verwenden - vorzugsweise
UTF-8
(aber wenn fast alles vorhanden istiso-8859-1
, verwenden Sie diesen).Um den Zeichensatz einer Datei schnell zu überprüfen, können Sie Folgendes versuchen:
Um den Zeichensatz aller Dateien in der Baumstruktur zu überprüfen, können Sie Folgendes versuchen:
oder (den
file
Befehl nur einmal aufrufen ):Um eine Zusammenfassung zu erhalten, verwenden Sie die
-b
Option zumfile
Befehl (um die Dateinamen wegzulassen) und leiten Sie das Ergebnis an weitersort | uniq -c
.quelle