Tengo una base de dados con información que muestro en un archivo PHP con formato XML. En la base de datos, codificada como utf_general_ci, las palabras están escritas correctamente (acentos, añes, apóstrofes...), y el archivo PHP está codificado en ANSI.
Esto es el código del archivo PHP:
Código PHP:
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("content-type:text/xml");
$name=$_GET['name'];
require ("include/dbconnect.php");
$query="";
echo "<markers>
";
if ($name != ""){
if ($name=='tots'){
$query="SELECT name,lat,lng,county,type,elevation FROM tutor";
}
if ($name=='prehistoria'){
$query="SELECT name,lat,lng,county,type,elevation FROM tutor WHERE county='Jefferson' limit 10";
}
if ($name=='antiga'){
$query="SELECT name,lat,lng,county,type,elevation FROM tutor WHERE county='Clackamas' limit 20";
}
if ($name=='parc'){
$query="SELECT name,lat,lng,county,type,elevation FROM tutor WHERE class='park' limit 20";
}
if ($name=='vila'){
$query="SELECT nom,lat,lng,resum,id,icona FROM llocs_mapa";
}
if ($query != ""){
$results = mysql_query($query);
while ($row=mysql_fetch_array($results)){
echo '<marker html="'.htmlentities($row["nom"], ENT_QUOTES).'"
lat="'.htmlentities($row["lat"], ENT_QUOTES).'"
lng="'.htmlentities($row["lng"], ENT_QUOTES).'"
resum="'.htmlentities(htmlentities($row["resum"], ENT_QUOTES)).'"
id="'.htmlentities($row["id"], ENT_QUOTES).'"
icona="'.htmlentities($row["icona"], ENT_QUOTES).'"/>
'; }
}
}
echo "</markers>";
?>
Y esto es el código XML que devuelve (está en catalán, pero da igual):
Código HTML:
<markers>
<marker html="Sant Miquel de Toudell"
lat="41.55267"
lng="1.97017"
resum="Esgl&eacute;sia rom&agrave;nica del segle XII"
id="1"
icona="vermell"/>
<marker html="Santa Maria de Toudell"
lat="41.56292"
lng="1.98011"
resum="Esgl&eacute;sia rom&agrave;nica del segle XII"
id="2"
icona="blau"/>
<marker html="Sant Jaume de Viladecavalls"
lat="41.55"
lng="1.92694"
resum="Esgl&amp;amp;eacute;sia del segle XVI o XVI, possiblement una reconstrucci&amp;oacute; d&amp;amp;#39;una d&amp;amp;#39;anterior"
id="3"
icona="blau"/>
<marker html="Camí de Santa Maria de Toudell"
lat="41.55952"
lng="1.98401"
resum="Lloc d&#039;habitaci&oacute; amb estructures (paviment rom&agrave;)"
id="8"
icona="blau"/>
<marker html="Sant Miquel de Toudell (II)"
lat="41.55354"
lng="1.97046"
resum="Necr&ograve;polis romana en mal estat"
id="9"
icona="blau"/>
<marker html="Can Tries"
lat="41.56445"
lng="1.98154"
resum="Lloc d&#039;habitatge rom&agrave; en mal estat"
id="10"
icona="blau"/>
<marker html="Cova de les Pedres"
lat="41.57861"
lng="1.93889"
resum="Gran quantitat d&#039;ind&uacute;stria l&iacute;tica de l&#039;Eneol&iacute;tic Precampaniforme"
id="11"
icona="blau"/>
<marker html="Estació de Viladecavalls"
lat="41.56564"
lng="1.95867"
resum="Restes d&#039;estructura amb pedra i morter amb canalitzaci&oacute;"
id="12"
icona="blau"/>
<marker html="Can Cabassa"
lat="41.53973"
lng="1.95699"
resum="Assentament rom&agrave; destru&iuml;t"
id="13"
icona="blau"/>
<marker html="Sant Mart&iacute; de Sorbet"
lat="41.55770"
lng="1.95499"
resum="Actual parr&ograve;quia de Viladecavalls, constru&iuml;da sobre una antiga esgl&eacute;sia rom&agrave;nica."
id="4"
icona="vermell"/>
</markers>
El problema que tengo es que me da error en la línea 20, columna 3, del archivo XML, o sea, la línia que pone:
Código HTML:
<marker html="Camí de Santa Maria de Toudell"
El error parece estar en el símbolo "<" (sin las comillas). Lo más curioso es que si en el archivo PHP cambio
Código PHP:
resum="'.htmlentities(htmlentities($row["resum"], ENT_QUOTES)).'"
por esto
Código PHP:
resum="'.htmlentities($row["resum"], ENT_QUOTES).'"
entonces el error es el mismo pero en la línea 2, columna 1:
Código HTML:
<marker html="Sant Miquel de Toudell"
Otra vez en el mismo símbolo...
Alguna idea?
Nota: el error es XML, según el Firefox...