¿Existe una función en PHP que pueda decodificar secuencias de escape Unicode como " \u00ed
" a " í
" y todas las demás ocurrencias similares?
Encontré una pregunta similar aquí, pero parece que no funciona.
Prueba esto:
$str = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) {
return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}, $str);
En caso de que sea C / C ++ / Java / Json-style basado en UTF-16:
$str = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) {
return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UTF-16BE');
}, $str);
\u
seguida de cuatro dígitos hexadecimales.fuente
json_decode('"' . $text . '"')
json_decode('{"t":"\uD83D\uDE0A"}')
es 😊$text
puede incluir comillas dobles. Por lo que una versión revisada sería:json_decode('"'.str_replace('"', '\\"', $text).'"')
. Gracias por tu ayuda :-)PHP 7+
A partir de PHP 7, puede usar la sintaxis de escape de puntos de código Unicode para hacer esto.
echo "\u{00ed}";
salidasí
.fuente
fuente
😍
Este es un enfoque de mazo para reemplazar UNICODE sin formato con HTML. No he visto ningún otro lugar para poner esta solución, pero supongo que otros han tenido este problema.
Aplique esta función str_replace al RAW JSON , antes de hacer cualquier otra cosa.
Esto no tomará tanto tiempo como cree, y reemplazará CUALQUIER unicode con HTML.
Por supuesto, esto se puede reducir si conoce los tipos Unicode que se devuelven en JSON.
Por ejemplo, mi código estaba recibiendo muchas flechas y unicode dingbat. Estos están entre 8448 y 11263. Entonces, mi código de producción se ve así:
Puede buscar los bloques de Unicode por tipo aquí: http://unicode-table.com/en/ Si sabe que está traduciendo árabe o Telegu o lo que sea, puede simplemente reemplazar esos códigos, no todos los 65,000.
Puede aplicar este mismo mazo a una codificación simple:
fuente
También hay una solución:
http://www.welefen.com/php-unicode-to-utf8.html
fuente
corrige los valores json, se agrega \ antes de u {xxx} a todos + ""
fuente