json_unescaped_unicode json_encode htmlentities example especiales ejemplo convertir caracteres php utf-8 json

php - json_encode - json_unescaped_unicode



Caracteres cirílicos en json_encode de PHP (7)

Funcionó con http://pear.php.net/pepr/pepr-proposal-show.php?id=198

Con desagradable puente en JSON.php, filas 298 ..

$char = pack(''C*'', $ord_var_c, ord($var{$c + 1})); $c += 1; //$utf16 = $this->utf82utf16($char); //$ascii .= sprintf(''/u%04s'', bin2hex($utf16)); $ascii .= $char;

¡Gracias!

Estoy intentando codificar la matriz Cyrillic UTF-8 en una cadena JSON utilizando la función json_encode de php. El código de muestra se ve así:

<?php $arr = array( ''едно'' => ''първи'', ''две'' => ''втори'' ); $str = json_encode($arr); echo $str; ?>

Funciona bien, pero el resultado del script se representa como:

{"/u0435/u0434/u043d/u043e":"/u043f/u044a/u0440/u0432/u0438","/u0434/u0432/u0435":"/u0432/u0442/u043e/u0440/u0438"}

que hace 6 caracteres para cada carácter cirílico. ¿Hay alguna manera de obtener los caracteres originales para los pares clave / valor en lugar de los codificados?



Encontré esto en el código de Zend framework:

http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Json/Decoder.php

Eche un vistazo a la función decodeUnicodeString (línea 474):

/** * Decode Unicode Characters from /u0000 ASCII syntax. * * This algorithm was originally developed for the * Solar Framework by Paul M. Jones * * @link http://solarphp.com/ * @link http://svn.solarphp.com/core/trunk/Solar/Json.php * @param string $value * @return string */ public static function decodeUnicodeString($chrs)

Es estático, y puedes extraerlo fácilmente, simplemente reemplaza la línea:

490: $utf8 .= self::_utf162utf8($utf16);

con:

490: $utf8 .= mb_convert_encoding($utf16, ''UTF-8'', ''UTF-16'');

No es una solución ideal, pero hizo el trabajo por mí: o)



$str = json_encode($arr, JSON_UNESCAPED_UNICODE);

El uso de esta solución funcionó para mí con el alfabeto latino y cirílico, con PHP 5.5


Esta es una pregunta muy antigua, pero no creo que haya sido respondida correctamente.

usa algo como esto:

print json_encode($array, JSON_UNESCAPED_UNICODE);


Estaba lidiando con el mismo problema para los turcos ... de hecho no tenemos que hacer nada, los navegadores los convierten automáticamente en bloques de código JS. Entonces, la manera más fácil de lograr que se descodifiquen es haciendo que pasen por javascript. (Ajax, etc.)

¿Json codifica con caracteres no ascii?