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:
No obstante, sigue el mismo problema.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('<','<',$xmlStr); $xmlStr = str_replace('>','>',$xmlStr); $xmlStr = str_replace('"','"',$xmlStr); $xmlStr = str_replace("'",''',$xmlStr); $xmlStr = str_replace("&",'&',$xmlStr); return $xmlStr; }
A lo que me devuelve la select le doy el siguiente tratamiento:
Código:
Y este es un extracto del output que logro: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>';
Código:
Las tildes hacen que pete.<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 harn m�s c�moda nuestra estancia." latitud="43.3271" longitud="-2.94417" />
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?