json_encode кодирует строки с символом Юникод (авторское право) как ноль? - PullRequest
5 голосов
/ 15 марта 2012

У меня проблемы с JSON-кодированием специальных символов.Эти символы обычно отображаются на моем компьютере, в блокноте, в браузерах и даже в моей базе данных.Однако они не кодируют JSON.Ниже приведен пример:

<?
$array['copyright_str'] = "Copyright site.com © 2011-2012";
echo json_encode($array);
?>

Символ авторского права после site.com - это то, что заставляет строку JSON отображаться как {"copyright_str":null}.Хотя это просто, у меня есть пользователи, которые вводят данные профиля в базу данных, которая может быть чем угодно.Когда появляется один из этих забавных персонажей, он ломает вещи.Какое хорошее решение этой проблемы?Кодированный мной API в значительной степени зависит от возврата данных из базы данных и печати строк в целом в формате JSON.

Мои многобайтовые настройки следующие:

     php -e phpinfo.php  | grep mb
    Configure Command =>  './configure'  '--enable-bcmath' '--enable-calendar' '--enable-dbase' '--enable-exif' '--enable-ftp' '--enable-gd-native-ttf' '--enable-libxml' '--enable-magic-quotes' '--enable-mbstring' '--enable-pdo=shared' '--enable-sockets' '--enable-zip' '--prefix=/usr/local' '--with-apxs2=/usr/local/apache/bin/apxs' '--with-bz2' '--with-curl=/opt/curlssl/' '--with-curlwrappers' '--with-freetype-dir=/usr' '--with-gd' '--with-imap=/opt/php_with_imap_client/' '--with-imap-ssl=/usr' '--with-jpeg-dir=/usr' '--with-kerberos' '--with-libdir=lib64' '--with-libexpat-dir=/usr' '--with-libxml-dir=/opt/xml2/' '--with-mcrypt=/opt/libmcrypt/' '--with-mhash=/opt/mhash/' '--with-mysql=/usr' '--with-mysql-sock=/var/lib/mysql/mysql.sock' '--with-mysqli=/usr/bin/mysql_config' '--with-openssl=/usr' '--with-openssl-dir=/usr' '--with-pcre-regex=/opt/pcre' '--with-pdo-mysql=shared' '--with-pdo-sqlite=shared' '--with-pic' '--with-png-dir=/usr' '--with-sqlite=shared' '--with-ttf' '--with-xmlrpc' '--with-xpm-dir=/usr' '--with-zlib' '--with-zlib-dir=/usr'
    xmlrpc_error_number => 0 => 0
    mbstring
    Multibyte string engine => libmbfl
    mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.
    mbstring.detect_order => no value => no value
    mbstring.encoding_translation => Off => Off
    mbstring.func_overload => 0 => 0
    mbstring.http_input => pass => pass
    mbstring.http_output => pass => pass
    mbstring.internal_encoding => no value => no value
    mbstring.language => neutral => neutral
    mbstring.strict_detection => Off => Off
    mbstring.substitute_character => no value => no value

Я бы хотел избежать сохранения вещейкак &copy;.Некоторые из этих данных будут сохранены в виде простого текста.

Ответы [ 3 ]

11 голосов
/ 16 марта 2012

кодировать данные в формате UTF-8 перед передачей их в функцию json_encode

<?
    $array['copyright_str'] = utf8_encode("Copyright site.com © 2011-2012");
    echo json_encode($array);
?>
2 голосов
/ 11 мая 2015

Я кодирую данные с тоннами символов UTF-8 с

json_encode($return, JSON_UNESCAPED_UNICODE)

и это хорошо работает. Я использую его для кодирования всех видов языков: арабского, китайского, тайского, литовского, немецкого, французского, испанского и т. Д. Все они имеют разные уникальные символы. О, я не пробовал кодировать снеговиков ☃:)

0 голосов
/ 15 марта 2012

Использовать urlencode до json_encode

<?
$array['copyright_str'] = "Copyright site.com © 2011-2012";
$array['copyright_str'] = urlencode($array['copyright_str']);
echo json_encode($array);
?>
...