Foros del Web » Programando para Internet » Javascript »

String a Json con html

Estas en el tema de String a Json con html en el foro de Javascript en Foros del Web. Pues el titulo lo dice todo Tengo un string, recibido por ajax, que es del tipo json y contienen html Pero al a hora de ...
  #1 (permalink)  
Antiguo 01/11/2009, 05:48
 
Fecha de Ingreso: junio-2007
Mensajes: 189
Antigüedad: 17 años, 5 meses
Puntos: 3
String a Json con html

Pues el titulo lo dice todo

Tengo un string, recibido por ajax, que es del tipo json y contienen html

Pero al a hora de parsearlo me da error, alguna alternativa?

E probado eval y una libreria json
  #2 (permalink)  
Antiguo 01/11/2009, 06:01
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: String a Json con html

En realidad, no hay problema en que tenga html. Posiblemente tengas otros, como que contenga saltos de línea o algún caracter que choque con la sintaxis javascript.
En ese caso deberías escapar la cadena antes de evaluarla.
Una función de escape que suelo utilizar en php cuando quiero pasar html a javascript es esta:
Código PHP:
function js_encode($s){
    
$texto='';
    
$lon=strlen($s);
    for(
$i=0;$i<$lon;++$i){
        
$num=ord($s[$i]);
        if(
$num<16$texto.='\x0'.dechex($num);
        else 
$texto.='\x'.dechex($num);
    }
    return 
$texto;


Última edición por Panino5001; 01/11/2009 a las 06:24
  #3 (permalink)  
Antiguo 01/11/2009, 06:29
 
Fecha de Ingreso: junio-2007
Mensajes: 189
Antigüedad: 17 años, 5 meses
Puntos: 3
Respuesta: String a Json con html

Cuando mando el html con el php ya utilizo json_encode y ya lo hace el solo
  #4 (permalink)  
Antiguo 01/11/2009, 06:59
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: String a Json con html

json_encode no escapa correctamente, sólo convierte un array a JSON.
Probá este ejemplo y vas a encontrarte con un error:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
<?php
$algo
=array('<div id="juan">
hola
</div>
'
,'bla');
$a=json_encode($algo);
?>
<script>
var json="<?php echo $a ?>";
json=eval("("+json+")");
onload=function(){
    document.body.innerHTML=json[0];
}
</script>
</head>

<body>
</body>
</html>
Probá este otro y vas a ver que no hay error:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
<?php
function js_encode($s){
    
$texto='';
    
$lon=strlen($s);
    for(
$i=0;$i<$lon;++$i){
        
$num=ord($s[$i]);
        if(
$num<16$texto.='\x0'.dechex($num);
        else 
$texto.='\x'.dechex($num);
    }
    return 
$texto;

$algo=array('<div id="juan">
hola
</div>
'
,'bla');
$a=json_encode($algo);
?>
<script>
var json="<?php echo js_encode($a?>";
json=eval("("+json+")");
onload=function(){
    document.body.innerHTML=json[0];
}
</script>
</head>

<body>
</body>
</html>
  #5 (permalink)  
Antiguo 01/11/2009, 07:09
 
Fecha de Ingreso: junio-2007
Mensajes: 189
Antigüedad: 17 años, 5 meses
Puntos: 3
Respuesta: String a Json con html

E encontrado otra solucion. Gracias de todas formas
  #6 (permalink)  
Antiguo 01/11/2009, 07:13
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: String a Json con html

Y?
Podés desescaparlo con stripslashes (json_encode ya escapa como lo hace addslashes, así que también deberás ver si no estás siendo redundante).
Pero el escapado que estoy sugiriendo no es del mismo tipo, es un escapado hexadecimal para javascript.

Edito: esto ya no se entiende porque editaste tu mensaje: decías que estabas usando addslashes, por eso mencioné stripslashes y hablé de posible redundancia.

Última edición por Panino5001; 01/11/2009 a las 07:31
  #7 (permalink)  
Antiguo 01/11/2009, 07:20
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: String a Json con html

1)Postea la forma en que lo has solucionado, así otro con el mismo problema la aprovecha
2)Testea los ejemplos (no es muy grato tratar de ayudar y que quede la sensación de que el destinatario de la ayuda no ha probado lo que se ha propuesto)-quizá sí lo probaste, hablo de la sensación que me ha quedado-
  #8 (permalink)  
Antiguo 14/06/2010, 13:51
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 22 años, 4 meses
Puntos: 10
Respuesta: String a Json con html

Cita:
Iniciado por Panino5001 Ver Mensaje
1)Postea la forma en que lo has solucionado, así otro con el mismo problema la aprovecha
2)Testea los ejemplos (no es muy grato tratar de ayudar y que quede la sensación de que el destinatario de la ayuda no ha probado lo que se ha propuesto)-quizá sí lo probaste, hablo de la sensación que me ha quedado-
Panino a mi me ha funcionado de maravillas tu función, hace días venia con este problema de enviar cadenas con saltos de linea a través de JSON, pero con tu función me funcionan de mil maravillas muchas gracias
__________________
se despide hasta la proxima
Gonzalo Castillo
  #9 (permalink)  
Antiguo 17/08/2010, 14:54
 
Fecha de Ingreso: julio-2009
Mensajes: 5
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: String a Json con html

Y entonces cual fue la solucion???
no hay que ser. si piden ayuda pero no pueden darla ?
mal muy mal :(
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:45.