Foros del Web » Programando para Internet » PHP »

Error Simplexml_load_file Input is not proper UTF-8

Estas en el tema de Error Simplexml_load_file Input is not proper UTF-8 en el foro de PHP en Foros del Web. Buenas tardes. Nuevamente recurro a ustedes ya que no he encontrado alguna solucion en la red. Al usar la funcion simplexml_load_file($file) me arroja el siguiente ...
  #1 (permalink)  
Antiguo 03/05/2011, 12:08
 
Fecha de Ingreso: septiembre-2007
Mensajes: 76
Antigüedad: 15 años, 4 meses
Puntos: 2
Error Simplexml_load_file Input is not proper UTF-8

Buenas tardes.

Nuevamente recurro a ustedes ya que no he encontrado alguna solucion en la red. Al usar la funcion simplexml_load_file($file) me arroja el siguiente error

Warning: simplexml_load_file() [function.simplexml-load-file]: archivoXML.xml:2: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xD3 0x4E 0x22 0x20 in http://prueba/xml/index.php on line 5

Cabe mencionar que esto solo pasa en los archivos los cuales contiene acentos en los atributos del 1er nodo.

Les agradecere cualquier comentario sobre este error.

Saludos
  #2 (permalink)  
Antiguo 05/05/2011, 08:35
 
Fecha de Ingreso: septiembre-2007
Mensajes: 76
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Error Simplexml_load_file Input is not proper UTF-8

Según lo que he investigado y preguntado en la red este error se debe a que el archivos xml contiene caracteres especiales no propios de UTF-8.
Para solucionar este problema primero se debe abrir el archivo con fopen, darle tratamiento a los acentos y despues llamar a simplexml_load_string.

Aqui les dejo el codigo que utilize para el que tenga el mismo error:

Código PHP:
$ruta "archivo.xml";

if (
is_file($ruta)) {
     if (
$da fopen($ruta"r")) {
          while (
$aux fgets($da)) {
               
$contenido .= $aux;
          }
          
fclose($da);
          
$aux codificarAcentos($contenido);
          
$aux html_entity_decode($aux,ENT_QUOTES"UTF-8");
          
$xmlObject simplexml_load_string($aux);
     }
}

function 
codificarAcentos($texto)
{
    
$texto str_replace("Á","Á",$texto);
    
$texto str_replace("É","É",$texto);
    
$texto str_replace("Í","Í",$texto);
    
$texto str_replace("Ó","Ó",$texto);
    
$texto str_replace("Ú","Ú",$texto);
    
    return 
$texto;

Se ve un poco redundante pero funciona.

Saludos

Etiquetas: input, utf-8
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 20:51.