У меня есть HTML-страница, которая правильно (кодировка физического на диске соответствует этому) объявляет его Content-Type :
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content=
"text/html; charset=utf-8">
<title> ...
Открытие файла с диска в браузере (Google Chrome, Firefox) работает нормально.
Запрашивая его через HTTP, веб-сервер отправляет другой заголовок Content-Type:
$ 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
(см. последнюю строку). Затем браузер использует ISO-8859-1 для отображения, что является нежелательным результатом.
Есть ли общий способ переопределить заголовки сервера, отправляемые в браузер из документа HTML?
;charset=...
из заголовка http. Сайт работает очень хорошоContent-Type: text/html
, разные файлы имеют разные кодировки на сервере. (Боюсь, что это тоже невозможно, потому что я думаю, что искал это несколько недель назад, но результат был не совсем окончательным). На всякий случай вы можете пролить свет прямо перед собой.Вы должны установить что-то подобное в своем корне .htaccess
источник
Нет, это невозможно изнутри HTML. Заголовок ответа сервера имеет приоритет над метатегом документа. Как указано в 5.2.2 Указание кодировки символов - HTML 4.01 Спецификация :
Так что это требует настройки на стороне сервера. Однако, как продолжается глава:
В моем случае заголовок Content-Type сервера содержит правильный mime-тип, но неправильную кодировку .
Как оказалось, в моей конфигурации Apache httpd была включена функция
AddDefaultCharset
добавления; charset=ISO-8859-1
части. Поместив в корневой каталог сайтов.htaccess
следующую строку:информация о кодировке была удалена:
(см. последнюю строку, без
; charset=...
части). Это в сочетании с метатегом html запускает указанную эвристику браузера, чтобы перенять кодировку из метатега. Сайт правильно декодирован.Протестировано с:
Эти три браузера имели проблемы с исходной конфигурацией и теперь работают (все на Fedora 17).
Во-первых, не было проблемы. Оба предпочитали UTF-8 из мета-тега по сравнению с настройкой ISO-8859-1 с сервера.
Не поддерживает UTF-8, поэтому всегда выбирает Western (Latin1) независимо от настроек сервера и метатега.
источник
В дополнение к тому, что было сказано здесь, я бы попробовал использовать одну и ту же кодировку на всех страницах - желательно
UTF-8
(но, если почти все такiso-8859-1
, используйте это).Чтобы быстро проверить кодировку файла, вы можете попробовать:
Чтобы проверить кодировку всех файлов в дереве, вы можете попробовать:
или (вызывая
file
команду только один раз):Чтобы получить сводку, используйте
-b
опцию дляfile
команды (чтобы опустить имена файлов) и направьте результат вsort | uniq -c
.источник