Гарантируется ли PHP-код json_encode для создания строки ASCII? - PullRequest
2 голосов
/ 17 апреля 2010

Ну, субъект говорит все. Я использую json_encode для преобразования некоторых данных UTF8 в JSON, и мне нужно перенести их на какой-то слой, который в настоящее время только для ASCII. Поэтому мне интересно, нужно ли мне сделать так, чтобы он знал UTF-8, или я могу оставить все как есть.

Глядя на JSON rfc, UTF8 также является допустимым набором символов в выводе JSON, хотя это и не рекомендуется, т. Е. Некоторые реализации могут оставлять данные UTF8 внутри. Вопрос в том, выводит ли реализация PHP что-либо как ASCII или предпочитает оставить что-то как UTF-8.

Ответы [ 3 ]

6 голосов
/ 17 апреля 2010

В отличие от поддержки JSON в других языках , json_encode() не имеет возможности генерировать что-либо , отличное , чем ASCII.

3 голосов
/ 17 апреля 2010

Согласно статье JSON в Википедии , символы Unicode в строках всегда

Unicode с двойными кавычками с обратной косой чертой

Примеры в руководстве по PHP на json_encode(), кажется, подтверждают это.

Таким образом, любой символ UTF-8 вне ASCII / ANSI должен быть экранирован следующим образом: \u0027 (обратите внимание, как @Ignacio указывает в комментариях, что это рекомендуемый способ справиться с этими символы, а не требуется один)

Однако, я полагаю, json_decode() преобразует символы обратно в их байтовые значения? Там у вас могут быть проблемы.

Если вам нужно быть уверенным, взгляните на iconv () , который может преобразовать вашу строку UTF-8 в ASCII (отбрасывая любые неподдерживаемые символы) заранее.

0 голосов
/ 17 апреля 2010

Ну, json_encode возвращает строку. Согласно документации PHP для строки :

Строка - это серия символов. До PHP 6 символ был таким же, как байт. То есть возможно ровно 256 разных символов. Это также подразумевает, что PHP не имеет встроенной поддержки Unicode. Смотрите utf8_encode () и utf8_decode () для некоторых основных функций Unicode.

Так что на данный момент вам не нужно беспокоиться о том, чтобы сделать его осведомленным о UTF-8. Конечно, вы все равно можете подумать об этом, чтобы защитить свой код на будущее.

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