Foros del Web » Programando para Internet » PHP »

Ayuda...Archivo no imprime los caracteres &

Estas en el tema de Ayuda...Archivo no imprime los caracteres & en el foro de PHP en Foros del Web. Estimados: No se si habran trabajdo con la plataforma MercadoSocios de Mercadolibre...resulta que la uso hace tiempo y al subirla a un nuevo servidor sus ...
  #1 (permalink)  
Antiguo 29/11/2008, 09:18
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 3 meses
Puntos: 2
Ayuda...Archivo no imprime los caracteres &

Estimados:

No se si habran trabajdo con la plataforma MercadoSocios de Mercadolibre...resulta que la uso hace tiempo y al subirla a un nuevo servidor sus archivos, no me imprime ningun caracter &. Será un problema del servidor?

El archivo es: http://www.futbolpasion.cl/includes_ml/noticias.php y el phpinfo lo pueden ver en http://www.futbolpasion.cl/phpinfo.php.

El codigo del noticias.php es:
Código PHP:
<?
# ID de tu sitio 
# Reemplazar en la linea 109 "279170" por tu site id

$as_categ_id="";
$buscar="IPOD";
$pais="MLC";
//Variable de URL as_categ_id
$id_categ=$as_categ_id;
if (
$as_categ_id="") { $id_categ="1000"; }
//Variable de URL buscar
$buscar="MP3";
//Variable de URL pais (MLA,MLB,etc)
$pais="MLC";

//Elije el dominio de MercadoLibre
switch ($pais) {
case 
"MLA":
    
$dominio="www.mercadolibre.com.ar";
    break;
case 
"MLB":
    
$dominio="www.mercadolivre.com.br";
    break;
case 
"MLM":
    
$dominio="www.mercadolibre.com.mx";
    break;
case 
"MLC":
    
$dominio="www.mercadolibre.cl";
    break;
case 
"MLV":
    
$dominio="www.mercadolibre.com.ve";
    break;
case 
"MCO":
    
$dominio="www.mercadolibre.com.co";
    break;
case 
"MLU":
    
$dominio="www.mercadolibre.com.uy";
    break;
case 
"MEC":
    
$dominio="www.mercadolibre.com.ec";
    break;
case 
"MLP":
    
$dominio="www.mercadolibre.com.pe";
    break;
default:
    
$dominio="www.mercadolibre.com.ar";
}
?>
  <table border="0" cellpadding="2" cellspacing="0" align="center" width="500" align="center" class="borde-negro">
    <tr>
    <?php

$insideitem 
false;
$item = array();
$tag "";
$title "";
$link "";
$price "";
$image="";
$currency"";

function 
startElement($parser$name$attrs) {
    global 
$insideitem$tag$title$link$price$image$currency$item;
    if (
$insideitem) {
        
$tag $name;
    } elseif (
$name == "ITEM") {
        
$insideitem true;
    }
}
$lista_colores=array('noti1','noti2'); 
$num_colores=2
$indice=0;
function 
endElement($parser$name) {
    global 
$insideitem$tag$title$link$price$image$currency$item$attrs;
    if (
$name == "ITEM") {
        echo 
"<td align=\"center\">";
        echo 
"<table align=\"center\" cellpadding=\"0\" cellspacing=\"0\">";
        echo 
"<tr>";
        echo 
"<td><div align=\"center\"><img src=\"";
  
$hoy=$image
$hoy=str_replace("http://www.mercadolibre.cl/org-img/items/MLC/042006/4338071_2441.jpg","http://www.mercadolibre.cl/org-img/items/MLC/042006/4338071_4075.jpg",$hoy); 
$hoy=str_replace("Colo Colo","<b>Colo Colo</b>",$hoy);  
echo 
$hoy;
        echo 
"\" height=\"50\"></div</td>";

        echo 
"<td><a href=".$link." target=\"_blank\" class=linkmc><center>";
              
$hoy=$title
$hoy=str_replace("Colo-Colo","<b>Colo-Colo</b>",$hoy); 
$hoy=str_replace("+"," +",$hoy); 
$hoy=str_replace("Colo Colo","<b>Colo Colo</b>",$hoy);  
echo 
$hoy;
        echo 
"</center></a>";
        echo 
"<font class=\"precio\"><center>".$currency.$price."</center></font></td>";
        echo 
"</tr>";
        echo 
"</table>";

        echo 
"</td>";
        
$title "";
        
$link "";
        
$price "";
        
$item "";
        
$image "";
        
$currency "";
        
$insideitem false;
    }
}

function 
characterData($parser$data) {
    global 
$insideitem$tag$title$link$price$image$currency$item$attrs;
    if (
$insideitem) {
    switch (
$tag) {
        case 
"ITEM":
        
$id .= $item['ID'];
        break;
        case 
"TITLE":
        
$title .= $data;
        break;
        case 
"LINK":
        
$link .= str_replace("XXX","346764",$data); 
        break;
        case 
"PRICE":
        
$price .= $data;
        break;
        case 
"IMAGE_URL":
        
$image .= $data;
        break;
        case 
"CURRENCY":
        
$currency .= $data;
        break;        
    }
    }
}

$xml_parser xml_parser_create('ISO-8859-1');
xml_set_element_handler($xml_parser"startElement""endElement");
xml_set_character_data_handler($xml_parser"characterData");
$fp fopen("http://".$dominio."/jm/searchXml?as_categ_id=".$id_categ."&as_word=".$buscar."&as_order_id=MAS_OFERTADOS&as_filtro_id=PRECIO_FIJO&as_display_type=G&noQCat=Y&as_qshow=3","r")
    or die(
"Error reading data.");
while (
$data fread($fp4096))
    
xml_parse($xml_parser$datafeof($fp))
        or die(
sprintf("XML error: %s at line %d"
            
xml_error_string(xml_get_error_code($xml_parser)), 
            
xml_get_current_line_number($xml_parser)));
fclose($fp);
xml_parser_free($xml_parser);

?></tr>
 </table>

Gracias
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
  #2 (permalink)  
Antiguo 29/11/2008, 09:26
Avatar de Acron_0248  
Fecha de Ingreso: junio-2005
Ubicación: 127.0.0.1
Mensajes: 1.648
Antigüedad: 18 años, 8 meses
Puntos: 18
Respuesta: Ayuda...Archivo no imprime los caracteres &

Bueno realmente no logré ver mucho con la página actual de noticias pero, si te refieres al ampersand de las URLs como las definidas por este código:
Código PHP:
$fp fopen("http://".$dominio."/jm/searchXml?as_categ_id=".$id_categ."&as_word=".$buscar."&as_order_id=MAS_OFERTADOS&as_filtro_id=PRECIO_FIJO&as_display_type=G&noQCat=Y&as_qshow=3","r"
Lo que te puedo recomendar es que cambies los ampersands por sus entidades correspondientes, sea la html de nombre o la hexadecimal, es decir, &amp; o &

La url anterior vendría quedando así utilizando la entidad por nombre:
Código PHP:
$fp fopen("http://".$dominio."/jm/searchXml?as_categ_id=".$id_categ."&amp;as_word=".$buscar."&amp;as_order_id=MAS_OFERTADOS&amp;as_filtro_id=PRECIO_FIJO&amp;as_display_type=G&amp;noQCat=Y&amp;as_qshow=3","r"
__________________
Usuario Reigistrado de linux #399288
  #3 (permalink)  
Antiguo 29/11/2008, 09:37
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 3 meses
Puntos: 2
Respuesta: Ayuda...Archivo no imprime los caracteres &

pero es que me tinca que el problema no va por ahi...porque el XML lo lee bien...el problema viene al momento de imprimir el html
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
  #4 (permalink)  
Antiguo 29/11/2008, 09:45
Avatar de Acron_0248  
Fecha de Ingreso: junio-2005
Ubicación: 127.0.0.1
Mensajes: 1.648
Antigüedad: 18 años, 8 meses
Puntos: 18
Respuesta: Ayuda...Archivo no imprime los caracteres &

Y las entidades html se definieron precisamente para problemas relacionados con la imprenta de caracteres generados por un navegador al leer un recurso web.

No te digo que sea la solución absoluta a tu problema, lo coloqué como algo que puedes probar, sino funciona se descarta y se prueba con otra cosa =)
__________________
Usuario Reigistrado de linux #399288
  #5 (permalink)  
Antiguo 29/11/2008, 09:49
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 3 meses
Puntos: 2
Respuesta: Ayuda...Archivo no imprime los caracteres &

nop...no funciono :(
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
  #6 (permalink)  
Antiguo 29/11/2008, 10:30
Avatar de Acron_0248  
Fecha de Ingreso: junio-2005
Ubicación: 127.0.0.1
Mensajes: 1.648
Antigüedad: 18 años, 8 meses
Puntos: 18
Respuesta: Ayuda...Archivo no imprime los caracteres &

Bueno, asumiendo que el parser lo esté volando dentro del loop, prueba con esta modificación:
Código PHP:
while ($data fread($fp4096))
    
$data str_replace('&''&amp;'$data); 
    
xml_parse($xml_parser$datafeof($fp)) 
__________________
Usuario Reigistrado de linux #399288
  #7 (permalink)  
Antiguo 29/11/2008, 11:09
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 3 meses
Puntos: 2
Respuesta: Ayuda...Archivo no imprime los caracteres &

me dice: XML error: Invalid document end at line 1
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
  #8 (permalink)  
Antiguo 29/11/2008, 11:19
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 3 meses
Puntos: 2
Respuesta: Ayuda...Archivo no imprime los caracteres &

ahiii lo arregle
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
  #9 (permalink)  
Antiguo 29/11/2008, 11:40
Avatar de Acron_0248  
Fecha de Ingreso: junio-2005
Ubicación: 127.0.0.1
Mensajes: 1.648
Antigüedad: 18 años, 8 meses
Puntos: 18
Respuesta: Ayuda...Archivo no imprime los caracteres &

Pues comenta cómo para que otros usuarios que puedan tener el mismo problema que tú sepan qué hacer :)
__________________
Usuario Reigistrado de linux #399288
  #10 (permalink)  
Antiguo 29/11/2008, 15:19
 
Fecha de Ingreso: diciembre-2004
Mensajes: 354
Antigüedad: 19 años, 3 meses
Puntos: 2
Respuesta: Ayuda...Archivo no imprime los caracteres &

Pues...aqui va el codigo definitivo:

Código PHP:
<?
# ID de tu sitio 
# Reemplazar en la linea 109 "279170" por tu site id

$as_categ_id="";
$buscar="IPOD";
$pais="MLC";
//Variable de URL as_categ_id
$id_categ=$as_categ_id;
if (
$as_categ_id="") { $id_categ="1000"; }
//Variable de URL buscar
$buscar="MP3";
//Variable de URL pais (MLA,MLB,etc)
$pais="MLC";

//Elije el dominio de MercadoLibre
switch ($pais) {
case 
"MLA":
    
$dominio="www.mercadolibre.com.ar";
    break;
case 
"MLB":
    
$dominio="www.mercadolivre.com.br";
    break;
case 
"MLM":
    
$dominio="www.mercadolibre.com.mx";
    break;
case 
"MLC":
    
$dominio="www.mercadolibre.cl";
    break;
case 
"MLV":
    
$dominio="www.mercadolibre.com.ve";
    break;
case 
"MCO":
    
$dominio="www.mercadolibre.com.co";
    break;
case 
"MLU":
    
$dominio="www.mercadolibre.com.uy";
    break;
case 
"MEC":
    
$dominio="www.mercadolibre.com.ec";
    break;
case 
"MLP":
    
$dominio="www.mercadolibre.com.pe";
    break;
default:
    
$dominio="www.mercadolibre.com.ar";
}
?>
  <table border="0" cellpadding="2" cellspacing="0" align="center" width="500" align="center" class="borde-negro">
    <tr>
    <?php

$insideitem 
false;
$item = array();
$tag "";
$title "";
$link .= ""
$price "";
$image="";
$currency"";

function 
startElement($parser$name$attrs) {
    global 
$insideitem$tag$title$link$price$image$currency$item;
    if (
$insideitem) {
        
$tag $name;
    } elseif (
$name == "ITEM") {
        
$insideitem true;
    }
}
$lista_colores=array('noti1','noti2'); 
$num_colores=2
$indice=0;
function 
endElement($parser$name) {
    global 
$insideitem$tag$title$link$price$image$currency$item$attrs;
    if (
$name == "ITEM") {
        echo 
"<td align=\"center\">";
        echo 
"<table align=\"center\" cellpadding=\"0\" cellspacing=\"0\">";
        echo 
"<tr>";
        echo 
"<td><div align=\"center\"><img src=\"";
  
$hoy=$image
$hoy=str_replace("http://www.mercadolibre.cl/org-img/items/MLC/042006/4338071_2441.jpg","http://www.mercadolibre.cl/org-img/items/MLC/042006/4338071_4075.jpg",$hoy); 
$hoy=str_replace("Colo Colo","<b>Colo Colo</b>",$hoy);  
$hoy=str_replace("amp;","&",$hoy);  
echo 
$hoy;
        echo 
"\" height=\"50\"></div</td>";

$link1=str_replace("amp;","&",$link);
        echo 
"<td><a href=".$link1." target=\"_blank\" class=linkmc><center>";
              
$hoy=$title
$hoy=str_replace("Colo-Colo","<b>Colo-Colo</b>",$hoy); 
$hoy=str_replace("+"," +",$hoy); 
$hoy=str_replace("Colo Colo","<b>Colo Colo</b>",$hoy);  
echo 
$hoy;
        echo 
"</center></a>";
        echo 
"<font class=\"precio\"><center>".$currency.$price."</center></font></td>";
        echo 
"</tr>";
        echo 
"</table>";

        echo 
"</td>";
        
$title "";
        
$link "";
        
$price "";
        
$item "";
        
$image "";
        
$currency "";
        
$insideitem false;
    }
}

function 
characterData($parser$data) {
    global 
$insideitem$tag$title$link$price$image$currency$item$attrs;
    if (
$insideitem) {
    switch (
$tag) {
        case 
"ITEM":
        
$id .= $item['ID'];
        break;
        case 
"TITLE":
        
$title .= $data;
        break;
        case 
"LINK":
        
$link .= str_replace("XXX","346764",$data); 
        break;
        case 
"PRICE":
        
$price .= $data;
        break;
        case 
"IMAGE_URL":
        
$image .= $data;
        break;
        case 
"CURRENCY":
        
$currency .= $data;
        break;        
    }
    }
}

$xml_parser xml_parser_create('ISO-8859-1');
xml_set_element_handler($xml_parser"startElement""endElement");
xml_set_character_data_handler($xml_parser"characterData");
$fp fopen("http://".$dominio."/jm/searchXml?as_categ_id=".$id_categ."&as_word=".$buscar."&as_order_id=MAS_OFERTADOS&as_filtro_id=PRECIO_FIJO&as_display_type=G&noQCat=Y&as_qshow=3","r")
    or die(
"Error reading data.");
while (
$data fread($fp4096))
{
$data str_replace('&''&amp;'$data);  
//printf("<pre>%s</pre>\n", print_r(htmlentities($data),TRUE));
    
xml_parse($xml_parser$datafeof($fp))
        or die(
sprintf("XML error: %s at line %d"
            
xml_error_string(xml_get_error_code($xml_parser)), 
            
xml_get_current_line_number($xml_parser)));
}
fclose($fp);
xml_parser_free($xml_parser);

?></tr>
 </table>
__________________
Pedro Pablo Vivanco D.
Webmaster todoalbo.cl
[email protected]
http://www.todoalbo.cl
"Dios creo el Cielo, Colo-Colo le puso todas sus Estrellas"
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 17:45.