как преобразовать символы Юникода в значения с обратной косой чертой - для решения проблемы json_encode - PullRequest
2 голосов
/ 24 января 2012

Я пытаюсь извлечь спортивных игроков из моей базы данных, которые уже хранятся в виде значений Юникода.при вызове json_encode он сдается, когда сталкивается с символами юникода в формате, который у меня есть:

$values = array('a'=>'BERDYCH, Tomáš','b'=>'FEDERER, Roger');
echo json_encode($values);

результат равен

{"a": "BERDYCH, Tom", "b":" FEDERER, Roger "}

Вы можете видеть, что 'Tom' был обрезан, потому что он достиг символов Unicode.

Я понимаю, что json_encode обрабатывает только символы стиля \ uxxxx, но проблема в том,моя база данных о тысячах спортивных конкурентов уже содержит значения, сохраненные в юникоде, поэтому каким-то образом мне нужно преобразовать символы типа в \ uxxxx без обновления источника данных.

Есть идеи?

Ответы [ 4 ]

1 голос
/ 24 января 2012

Ваш исходный код и / или данные, поступающие из базы данных, не кодируются в UTF-8.Я предполагаю, что это одна из специализированных кодировок ISO-8859, но я не уверен.При сохранении исходного кода убедитесь, что он сохранен в UTF-8.При получении данных из базы данных убедитесь, что вы устанавливаете соединение в utf8.

См. Что абсолютно, каждый программист должен знать о кодировках и наборах символов для работы с текстом и Обработка Юникода спереди назад в веб-приложении .

1 голос
/ 24 января 2012

json_encode() делает это, когда получает символы, которые не являются допустимыми символами UTF-8.

Если вы выбираете данные из базы данных, наиболее вероятная причина заключается в том, что ваше соединение не имеет кодировки UTF-8., и вы получаете данные ISO-8859-1 из ваших запросов.

Покажите код вашей базы данных для предложения, как это изменить.

Я понимаю, что json_encode обрабатывает только стиль \ uxxxxсимволы

Это не так.json_encode() выводит Символы Unicode, закодированные таким образом, но он не ожидает их во входящих данных.

0 голосов
/ 24 января 2012

Это вопрос c #, но взгляните на Преобразование строк Unicode в экранированную строку ascii для реализации, которая делает это.

0 голосов
/ 24 января 2012

Чтобы убедиться, что они UTF8, закодируйте все значения в вашем массиве

$values = array_map('utf8_encode', $values);

Если это не помогает, используйте mb_detect_encoding () и mb_convert_encoding (), чтобы изменить кодировку для конкретного языка на UTF8.

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