Tengo problemas para la codificación JSON de caracteres especiales. Estos caracteres se muestran normalmente en mi computadora, en el Bloc de notas, en los navegadores e incluso en mi base de datos. Sin embargo, no codifican JSON. Un ejemplo es el siguiente:json_encode codifica cadenas con caracteres Unicode (derechos de autor) como nulos?
<?
$array['copyright_str'] = "Copyright site.com © 2011-2012";
echo json_encode($array);
?>
El símbolo de copyright después site.com es lo que está haciendo la cadena JSON eco como {"copyright_str":null}
. Si bien esto es simple, tengo usuarios que ingresan datos de perfil en una base de datos que puede ser cualquier cosa. Cuando uno de estos personajes funky aparece, rompe las cosas. ¿Cuál es una buena solución para este problema? La API codificada se basa en gran medida en la devolución de datos de la base de datos y en las cadenas de impresión en general como JSON.
Mi configuración de varios bytes son los siguientes:
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
me gustaría evitar guardar cosas como ©
. Algunos de estos datos se almacenarán como texto sin formato.
¿Está compilado PHP para Unicode/MB? Y, además, ¿'json_encode' funciona correctamente en Unicode/MB? –
Use el valor de ascii en su lugar –
@IbrahimAzharArmar Hay muchos caracteres Unicode que * no tienen equivalente ASCII *. –