Специальные символы в моих переменных javascript продолжают отображаться как �, как мне предотвратить это? - PullRequest
1 голос
/ 14 декабря 2010

У меня есть скрипт javascript, который вызывает страницу php для предоставления формы ajax с предложениями.Предложения корректно возвращаются страницей php, но по какой-то причине, когда я устанавливаю текст ответа на запрос объекта javascript как элемент на моей HTML-странице, все специальные символы (т. Е. Или ã) отображаются в виде этого знака вопроса.,Должна ли функция II выполняться по тексту ответа на запрос, чтобы убедиться, что они прочитаны правильно?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 14 декабря 2010

Если вы не используете свои 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.

0 голосов
/ 14 декабря 2010

Я бы попытался в вашем php-скрипте закодировать все как html-сущности.

Это легко проверить, выполнив что-то вроде этого перед возвратом результатов в javascript:

$results = htmlentities($htmlstring);

Есть также функция htmlspecialchars, которую вы можете попробовать.

Подробнее об этом здесь:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...