Manejar objetos JSON con acentos en PHP

16/May/2013 PHP , 11 Comentarios

Si estas creando objetos JSON en PHP es posible que te encuentres ante la necesidad de manejar objetos JSON con acentos. En estos casos hay que realizar una serie de manipulaciones sobre dichos textos para poder manejar objetos JSON con acentos en PHP de la forma correcta.

Y es que después de realizar el siguiente código:

  1. $objeto = new stdClass();
  2. $objeto->texto = "Víctor";
  3. $json = json_encode($objeto);
  4. echo $json;

Te encuentres con la desagradable sorpresa de que el resultado del objeto JSON contenga un null.

{"texto":null}

Es por ello que tenemos que saber como manejar objetos JSON con acentos en PHP. El truco está en convertir los textos que necesitemos en UTF8. Esto lo podemos hacer de dos formas. La primera forma es que todo el sistema en el que trabajemos funcione en UTF8 en su totalidad, por lo cual las cadenas ya son UTF8.

La segunda forma es convertir la cadena que estemos utilizando en UTF8. Y es que la función json_encode está esperando un parámetro que sea puramente UF8.

Para convertir el texto en UTF8 utilizamos la función utf8_encode pasándola la cadena como parámetro.

  1. $objeto->texto = utf8_encode("Víctor");

Una vez que hemos manipulado el objeto JSON con acentos en PHP obtendremos la siguiente respuesta:

{"texto":"V\u0092ctor"}

Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D

11 comentarios en “Manejar objetos JSON con acentos en PHP”

Víctor Cuervo

Jhonatan Giraldo

Genial man!! Me salvaste! Mira encontre otra función que aplica el utf8 encode a un array. Por si le puede ser de utilidad a alguien.

function utf8_converter($array)
{
array_walk_recursive($array, function(&$item, $key){
if(!mb_detect_encoding($item, ‘utf-8’, true)){
$item = utf8_encode($item);
}
});

return $array;
}

Fuente: http://nazcalabs.com/blog/convert-php-array-to-utf8-recursively/

Víctor Cuervo

Víctor Cuervo

Gracias por el aporte!

Saludos.

Víctor Cuervo

Manuel

Cerca de una hora sin saber porque json_encode() (mientras que var_dump me devolvía bien los datos) no me funcionaba hasta leer este post, ir a mi base de datos y ver que había una tilde.
Gracias.

Víctor Cuervo

Adrian

Gracias por el aporte!

Víctor Cuervo

Potter

Muchas gracias por la información 😀

Víctor Cuervo

Víctor Cuervo

Potter, me alegro que te haya servido. 😀

Víctor Cuervo

erik

Preciso men Funciono a la perfeccion
do {
$tema[]=array( “value” => utf8_encode($row_rslistado[‘titulo’]),
“idtemag” => $row_rslistado[‘idtemag’],
“estado” => $row_rslistado[‘estado’],
);
}
echo json_encode($tema);

Víctor Cuervo

Alex

Para reconvertirlo esta el utf8_decode($valor);

Víctor Cuervo

luisalfredo

Aja y como haces para reconvertirlo? es decir necesito que se imprima correctamente los acentos y eso

Víctor Cuervo

mafuclero

En caso q sea un array ?

Víctor Cuervo

Víctor Cuervo

Buenas mafuclero,

El ejemplo de codificación de JSON de un array lo tienes en http://lineadecodigo.com/php/crear-un-objeto-json-en-php/

Espero que te sea de utilidad.

Los comentarios están cerrados.