JSON со специальными символами, такими как é - PullRequest
17 голосов
/ 02 сентября 2011

Я разрабатываю зависимый скрипт выбора, используя jQuery, PHP и JSON в качестве ответа.

Все идет хорошо, за исключением использования специальных символов, таких как французские (é, è, à ...)

если я предварительно закодирую их как (é, è, à) (здесь я использую пробелы между амперсандом и остальной частью слова, чтобы предотвратить автоматическое кодирование в моем вопросе), это работает, но при рендеринге с помощью jqueryсимволы не преобразуются в то, что они должны выглядеть (é ...), вместо этого они отображаются как есть (é)

Если я напишу их как (é) и не буду предварительно кодировать их полностьюзначение в этой записи массива не отображается.

Что мне здесь делать?

Спасибо.

Ответы [ 3 ]

8 голосов
/ 02 сентября 2011

Если я напишу их как (é) и не буду предварительно кодировать их полное значение в эта запись массива не отображается.

Что мне здесь делать?

В JSON вы не кодируете значения HTML. Вы отправляете их буквально (é) и правильно устанавливаете Content-Type:

header('Content-Type: application/json; Charset=UTF-8');

Объявите кодировку, в которой находятся ваши данные.

6 голосов
/ 22 октября 2014

Это сработало для меня, надеюсь, оно будет работать для всех, кто сталкивался с подобными проблемами.

$title = 'é';
$title = mb_convert_encoding($title, "UTF-8", "HTML-ENTITIES");

header('Content-Type: application/json; Charset="UTF-8"');
echo json_encode(array('title' => $title));

Функция mb_convert_encoding принимает значение и преобразует его из (в данном случае) HTML-ENTITIES в UTF-8..

Смотрите здесь для меня подробности о функции http://php.net/manual/en/function.mb-convert-encoding.php

6 голосов
/ 02 сентября 2011

Так же, как и первый ответ

Вы используете базу данных? Если да, убедитесь, что таблица базы данных объявлена ​​UFT8 Как объявлена ​​HTML-страница? UTF-8, Это строка в файле сценария PHP? Если да, убедитесь, что файл имеет формат файла UTF-8

Вы также можете использовать utf8_encode (для отправки в HTML) и utf8_decode (для получения), но не правильным способом

...