php utf8_encode - символы начинаются с префикса \ u - PullRequest
3 голосов
/ 07 октября 2011

У меня есть строка ISO, которую я извлекаю из базы данных, и когда я ее utf8_encode, я получаю \ u00f6 вместо Ö. Это сбивает с толку javascript / html, который подстраивает этот скрипт PHP. Почему вместо ...? Как получить Ö вместо этого?

редактирование: Хорошо, я провел еще несколько экспериментов, и оказалось, что это вызвано комбинацией utf8_encode и json_encode. Хотя, если я вообще не использую utf8_encode, значение в json будет нулевым.

json_encode(array("city"=>utf8_encode("göteborg")))

Ответы [ 2 ]

9 голосов
/ 07 октября 2011

utf8_encode не кодирует символы в \uxxxx, как вы уже поняли, это json_encode делает это. И это нормально, потому что формат JSON определяет это поведение. Если ваш клиент правильно декодирует строку JSON в тип данных Javascript, экранирование \uxxxx будет преобразовано в надлежащие символы Юникода.

Что касается json_encode отбрасывания символов, если ваша строка в кодировке Latin1: это не указано явно на странице руководства, но Javascript и JSON полностью основаны на Unicode, поэтому я подозреваю, что Latin1 - недопустимая и неожиданная кодировка для использования со строками JSON. так что ломается.

1 голос
/ 07 октября 2011

Как вы это распечатываете? javascript изначально поддерживает кодировку \ uXXXX, и делает это в javascript:

var x = "\u00f6"; alert(x); 

следует распечатать небольшой ö.

РЕДАКТИРОВАТЬ: Согласно вашему коду, если вы выводите это непосредственно в поток ответов и используете фактический ответ в качестве переменной в js на стороне клиента, вам вообще не нужно заботиться о json_encode.

Вы бы просто сказали браузеру, что контент является utf8, установив заголовок типа контента:

header('content-type: text/plain;charset=utf8');

И тогда код jQuery.data () будет работать нормально.

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