La función PHP json_encode convierte cadenas UTF-8 en entidades hexadecimales: por qué y cómo resolverlo
La función PHP json_encode puede codificar variables PHP en JSON (notación de objetos JavaScript). Sin embargo, cuando se trata de caracteres Unicode en codificación UTF-8, la función puede convertirlos a entidades hexadecimales de forma predeterminada. Esto se debe a que JSON no admite de forma nativa caracteres UTF-8, que son caracteres de varios bytes que representan caracteres no ASCII.
¿Por qué PHP convierte cadenas UTF-8 en entidades hexadecimales?
La función json_encode de PHP utiliza la especificación JSON, que dicta que los caracteres Unicode que no se pueden representar como caracteres ASCII deben codificarse en hexadecimal. secuencias de escape. Esto garantiza la compatibilidad con aplicaciones y dispositivos más antiguos que pueden no admitir UTF-8.
Resolución del problema de conversión
Para resolver este problema y evitar la conversión de UTF-8 cadenas a entidades hexadecimales, PHP introdujo la opción JSON_UNESCAPED_UNICODE en la versión 5.4.0. Esta opción indica a json_encode que utilice puntos de código Unicode en lugar de secuencias de escape hexadecimales para caracteres que no sean ASCII.
Ejemplo
Suponga que tiene el siguiente script PHP:
Este código generará la siguiente cadena JSON, donde los caracteres cirílicos están codificados como entidades hexadecimales:
"\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u0438 \u0433\u0440\u0435\u0448\u043a\u0430."
Para generar los caracteres UTF-8 directamente, puede usar la opción JSON_UNESCAPED_UNICODE:
Esto producirá la siguiente cadena JSON, donde los caracteres cirílicos se representan utilizando sus puntos de código Unicode:
"База данни грешка."
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3