У меня есть специальные персонажи:
http://209.141.56.244/test/char.php
но когда я возьму этот файл через ajax здесь, они появятся снова? Метки:
http://209.141.56.244/test/char.html
Эти символы должны быть «ISO-8859-1 Western», но переключение кодировки браузера на любой из параметров не помогает.
Почему это и как я могу это исправить?
Ваш сервер отправляет ответ Ajax как text/html
, что делает браузер предполагаемым UTF-8 (который по умолчанию), но ваши данные не являются UTF-8.
Отправьте ответ Ajax как text/html; Charset=Windows-1252
text/html; Charset=Windows-1252
(вы на самом деле не используете ISO-8859-1), и он должен работать.
header('Content-Type: text/html; Charset=Windows-1252');
PS: Переключение браузера на другую кодировку не помогает, потому что это влияет только на страницу. Последующие ответы Ajax все еще декодируются в соответствии с их соответствующими заголовками.
Ваша страница возвращает text/html
как Content-Type
, поэтому браузер (и сценарий ajax) интерпретирует их с помощью кодировки по умолчанию, заданной текущим контекстом.
В php вы можете заставить кодирование использовать функцию заголовка для html-версии, вы должны использовать файлы конфигурации apache (при условии, что вы используете apache, иначе смотрите ваш веб-серверный документ).
http://www.w3.org/International/O-HTTP-charset говорит
Очень важно всегда указывать веб-документы в явном виде. HTTP 1.1 говорит, что кодировка по умолчанию – ISO-8859-1. Но в других кодировках слишком много немаркированных документов, поэтому браузеры используют предпочтительную кодировку читателя, когда нет явного параметра charset.
с той же страницы
Apache . Это можно сделать с помощью директив AddCharset (Apache 1.3.10 и более поздних версий ) или AddType для каталогов или отдельных ресурсов (файлов). С помощью AddDefaultCharset (Apache 1.3.12 и более поздних версий ) можно установить кодировку по умолчанию для всего сервера. Для получения дополнительной информации см. Статью « Настройка charset» в .htaccess.