Если вы не используете свои HTML-страницы как UTF-8, браузер определит кодировку, обычно однобайтовую кодовую страницу Windows, в зависимости от локали пользователя.
Но этого не происходит для AJAX. С XMLHttpRequest
, если вы не указали кодировку в параметре Content-Type: ...; charset=
, браузер будет обрабатывать его как UTF-8. Это означает, что если вы на самом деле обслуживаете содержимое кодовой страницы Windows 1252 (западноевропейское), вы получите недопустимую последовательность UTF-8 и последующий знак вопроса.
Вы не хотите использовать кодировку не-UTF-8! Убедитесь, что вы используете UTF-8 во всем приложении. Обслуживайте все свои страницы с помощью Content-Type: text/html; charset=utf-8
, сохраняйте свои данные в таблицах UTF-8, используйте mysql_set_charset()
, чтобы выбрать UTF-8 и т. Д.
В любом случае рассмотрите возможность передачи ответов AJAX с использованием JSON. Функция json_encode()
создаст строку JSON, которая использует escape-последовательности JavaScript для не-ASCII-символов, что позволяет избежать любой проблемы несоответствия кодировки. Также это легче расширить, чтобы добавить функциональность, чем возвращать необработанный HTML.