Foros del Web » Programando para Internet » PHP »

Limite de caracteres en XML?

Estas en el tema de Limite de caracteres en XML? en el foro de PHP en Foros del Web. Hola a todos, Como siempre, acudo a ustedes cuando he agotado todas las opciones. Mi script, imprime un archivo xml de la siguiente manera Código ...
  #1 (permalink)  
Antiguo 30/03/2009, 21:50
 
Fecha de Ingreso: abril-2004
Mensajes: 154
Antigüedad: 20 años
Puntos: 0
Limite de caracteres en XML?

Hola a todos,
Como siempre, acudo a ustedes cuando he agotado todas las opciones.
Mi script, imprime un archivo xml de la siguiente manera
Código PHP:
$xml = '<?xml version="1.0" encoding="UTF-8"?>';
$xml .= "<objetos>";


while($objeto= mysql_fetch_array($objetos_qu)){
    
        $xml .= '<objeto 
                        param1 ="'.$objeto["campo1"].'" 
                                                param2 ="'.$objeto["campo2"].'" 
                        
                />';
    }
    $xml .= "</objetos>";
    echo utf8_encode($xml);
El problema se presenta cunado la variable $objeto["campo2"] tiene muchos caracteres (80), pues cuando imprime, agrega un line break, que ni utilizando nl2br lo logro eliminar. Es como si hubiera una limitante de caracteres para el valor y agrega el retorno de linea. Obviamente este line break rompe la estructura del xml para poderlo parsear con javascript.

Alguna sugerencia???
GatorV que dices???
__________________
Desdichado quien duerme en la mañana
  #2 (permalink)  
Antiguo 30/03/2009, 21: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
Puntos: 834
Respuesta: Limite de caracteres en XML?

Podrías probar con:
Código PHP:
trim($objeto["campo2"]); 
Aunque, si vas a usarlo en javascript, quizá te sirva un escape hexadecimal:
Código PHP:
<?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;
}
echo 
js_encode($objeto["campo2"]);
?>
  #3 (permalink)  
Antiguo 30/03/2009, 22:03
 
Fecha de Ingreso: abril-2004
Mensajes: 154
Antigüedad: 20 años
Puntos: 0
Respuesta: Limite de caracteres en XML?

Y despues como lo decodifico en js? unescape ?
trim solo me elimina los espacios de los extremos no?

Gracias por tu aporte, mi problema es de gran urgencia
__________________
Desdichado quien duerme en la mañana
  #4 (permalink)  
Antiguo 30/03/2009, 22:06
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
Puntos: 834
Respuesta: Limite de caracteres en XML?

trim elimina sólo los espacios de los extremos. Pero en javascript no necesitás decodificar nada. Probá esto, por ejemplo:
Código PHP:
<?php 
$objeto
["campo2"]="la luna está 
en cuarto 

menguante
"
;
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;
}
echo 
'<script>alert("'.js_encode($objeto["campo2"]).'");</script>';
?>
  #5 (permalink)  
Antiguo 30/03/2009, 22:10
 
Fecha de Ingreso: abril-2004
Mensajes: 154
Antigüedad: 20 años
Puntos: 0
Muy interesante panino, ya mismo procedo a probar.

Panino aprovecho y te pregunto. Esto me sirve tambien para cuando vienen comillas y caracteres que me rompen la estructura? existe una manera mas ideal?

Gracias

Panino, ya probé tu ejemplo y funciona excelente. Pero lo que pasa es que el archivo xml lo parseo con js pero lo imprimo finalmente en una zona html, entonces sale todo el codigo hx.

Como procedemos entonces? como lo "unescapo"?
__________________
Desdichado quien duerme en la mañana

Última edición por GatorV; 31/03/2009 a las 09:55
  #6 (permalink)  
Antiguo 30/03/2009, 22: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
Puntos: 834
Respuesta: Limite de caracteres en XML?

Sí, sirve para eso y también para bloques html completos. Creo que es una buena manera, aunque dificulta la lectura, como habrás visto en el código fuente (aunque eso no siempre es malo) ;)
  #7 (permalink)  
Antiguo 30/03/2009, 22:14
 
Fecha de Ingreso: abril-2004
Mensajes: 154
Antigüedad: 20 años
Puntos: 0
pero sabes que me interesa mas en este momento? los caracteres especiales. Cual es la manera mas adecuada de codificar todos los caracteres para enviarlos en el xml para que lo pueda recibir con js sin que se generen errores. Esa codificación hexadecimal me parece adecuada pero necesitaria una función que devuelva el encode

Otra limitante que veo en este método es que el string crece demasiado, y considerando que el xml es largo, con este metodo se vuelve muy pesado el archivo, no crees?
__________________
Desdichado quien duerme en la mañana

Última edición por GatorV; 31/03/2009 a las 09:55
  #8 (permalink)  
Antiguo 30/03/2009, 22:17
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
Puntos: 834
Respuesta: Limite de caracteres en XML?

No tiene porqué aparecer escapado. Probá esto:
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>
</head>

<body>
<div id="pp"></div>
<?php 
$objeto
["campo2"]="la luna está 
en cuarto 

menguante
"
;
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;
}
echo 
'<script>document.getElementById("pp").innerHTML="'.js_encode($objeto["campo2"]).'";</script>';
?>
</body>
</html>
  #9 (permalink)  
Antiguo 30/03/2009, 22: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
Puntos: 834
Respuesta: Limite de caracteres en XML?

También podrías probar con htmlentities o usando un bloque CDATA (en uno de los mensajes de ayer se discutió sobre eso)
  #10 (permalink)  
Antiguo 30/03/2009, 22:22
 
Fecha de Ingreso: abril-2004
Mensajes: 154
Antigüedad: 20 años
Puntos: 0
Tienes razón Panino, en este caso si sale. Pero te insisto en que considerando rendimeinto y un xml bastante grande, este método me triplica su tamaño. Cual crees que sea la mejor manera de enviar el string escapando los caracteres especiales pero que despues los pueda imprimir bien con js? he intentado con htmlentities y no obtengo buen resultado. Otra que hice fué enviar los datos a la base de datos aplicandoles el escape de js y cuando los retorno, aplico unescape.

me puedes dar la referencia del CDATA? depronto encuentro salida por ahi
__________________
Desdichado quien duerme en la mañana

Última edición por GatorV; 31/03/2009 a las 09:56
  #11 (permalink)  
Antiguo 30/03/2009, 22:26
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
Puntos: 834
Respuesta: Limite de caracteres en XML?

Fijate aquí: http://www.forosdelweb.com/f18/carac...es-xml-684562/
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:55.