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:
$objeto = new stdClass();
$objeto->texto = "Víctor";
$json = json_encode($objeto);
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.
$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"}
Santi
Gracias!!! Me estaba volviendo loco
Víctor Cuervo
Nos alegra mucho oir eso Santi. La verdad que los acentos y el JSON dan más de un dolor de cabeza.
Saludos.
alfredo
wc.Headers.Add(HttpRequestHeader.ContentType, «application/json; charset=utf-8»)
wc.Headers.Add(HttpRequestHeader.Authorization, «Token token=» & token)
Dim respuesta = wc.UploadString(ruta, «POST», json)
Return respuesta
yo le pongoe esta opcion pero no me sale, sale error de servidor 500
es por la letra Ñ, alguien le puede ayudar please
shulo
eso no es PHP
alexander
$objeto = new stdClass();
$objeto->texto = «Víctor»;
$json = json_encode($objeto,JSON_UNESCAPED_UNICODE);
echo $json;
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
Gracias por el aporte!
Saludos.
ademar
La verdad 1000 gracias esa funcion para array me sirbio al pelo, estube con ese problema varios dias sin saber el porque , gracias una vez mas
EDUARDO MIGUEL
Gracias amigo, me funciono de maravilla.
Kevin
Gracias hermano! Me has salvado el día.
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.
Adrian
Gracias por el aporte!
Potter
Muchas gracias por la información :D
Víctor Cuervo
Potter, me alegro que te haya servido. :-D
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);
Alex
Para reconvertirlo esta el utf8_decode($valor);
luisalfredo
Aja y como haces para reconvertirlo? es decir necesito que se imprima correctamente los acentos y eso
mafuclero
En caso q sea un array ?
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.