Foros del Web » Programando para Internet » PHP »

Problema con carácteres especiales, php y xml

Estas en el tema de Problema con carácteres especiales, php y xml en el foro de PHP en Foros del Web. Espero que aquí este bien situado este post. El problema que tengo es el siguiente: Estoy trabajando con ubicaciones sobre un mapa de google maps ...
  #1 (permalink)  
Antiguo 15/04/2014, 09:26
 
Fecha de Ingreso: mayo-2011
Mensajes: 17
Antigüedad: 12 años, 11 meses
Puntos: 4
Pregunta Problema con carácteres especiales, php y xml

Espero que aquí este bien situado este post.

El problema que tengo es el siguiente:

Estoy trabajando con ubicaciones sobre un mapa de google maps y necesito pasarle un xml con los datos de mi base de datos. Consigo crear un archivo con el formato adecuado con una select sobre mi tabla, el tema es que me da el siguiente error:

Error de lectura XML: mal formado
Ubicación: http://localhost/mismascotas/googlexml.php
Número de línea 1, columna 542:

Y esto señala una 'á'. Para evitar esto creo una función que cambie este tipo de caracteres a los normales.

Código:
function parseToXML($xmlStr)  {

    $xmlStr = trim($xmlStr);

    $xmlStr = str_replace(
        array('á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä'),
        array('a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A'),
        $xmlStr
    );

    $xmlStr = str_replace(
        array('é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë'),
        array('e', 'e', 'e', 'e', 'E', 'E', 'E', 'E'),
        $xmlStr
    );

    $xmlStr = str_replace(
        array('í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î'),
        array('i', 'i', 'i', 'i', 'I', 'I', 'I', 'I'),
        $xmlStr
    );

    $xmlStr = str_replace(
        array('ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô'),
        array('o', 'o', 'o', 'o', 'O', 'O', 'O', 'O'),
        $xmlStr
    );

    $xmlStr = str_replace(
        array('ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü'),
        array('u', 'u', 'u', 'u', 'U', 'U', 'U', 'U'),
        $xmlStr
    );

    $xmlStr = str_replace(
        array('ñ', 'Ñ', 'ç', 'Ç'),
        array('n', 'N', 'c', 'C',),
        $xmlStr
    );
$xmlStr = str_replace("[<>]","-",$xmlStr);
$xmlStr = str_replace('<','&lt;',$xmlStr); 
$xmlStr = str_replace('>','&gt;',$xmlStr); 
$xmlStr = str_replace('"','&quot;',$xmlStr); 
$xmlStr = str_replace("'",''',$xmlStr); 
$xmlStr = str_replace("&",'&amp;',$xmlStr); 

return $xmlStr;
}
No obstante, sigue el mismo problema.

A lo que me devuelve la select le doy el siguiente tratamiento:

Código:
header("Content-type: text/xml");

// Start XML file, echo parent node
echo '<markers>';

// Iterate through the rows, printing XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
  // ADD TO XML DOCUMENT NODE
  echo '<marker ';
  echo 'idLugar="' . parseToXML($row['idLugar']) . '" ';
  echo 'nombre="' . parseToXML($row['nombre']) . '" ';
  echo 'descripcion="' . parseToXML($row['descripcion']) . '" ';
  echo 'latitud="' . $row['latitud'] . '" ';
  echo 'longitud="' . $row['longitud'] . '" ';
  echo '/>';
}

// End XML file
echo '</markers>';
Y este es un extracto del output que logro:

Código:
<markers><marker idLugar="4" nombre="Akarlanda" descripcion="Akarlanda es un parque recreativo perfectamente integrado en la naturaleza y dotado de todo tipo de comodidades (restaurante, barbacoas, columpios, rocodromo, aparcamientos, etc) que har￿n m�s c�moda nuestra estancia." latitud="43.3271" longitud="-2.94417" />
Las tildes hacen que pete.

El cotejamiento de la bbdd es utf8_spanish_ci.

Cotejamiento de la conexión al servidor es utf8mb4_spanish_ci.

¿Algún alma caricativa sabe qué tengo que hacer para solucionar este problema?

Etiquetas: especiales, mysql, select, tabla, xml
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 01:25.