2010-01-26 23 views
22
<tag> 
Алекс М 
</tag> 

Cuando intento para obtener el contenido del siguiente código utilizando funciones DOMDocument, devuelve algo como:PHP codificación con DOMDocument

ÐÐ»ÐµÐºÑ Ðœ 

He tratado de establecer DOMDocument codificación a diferentes valores (UTF 8, ISO-8859-1), utilizando mb_convert_encoding, iconv y utf8_encode pero sin éxito.

¿Cómo puedo obtener "Алекс М" en lugar de "Ðл ÐμÐºÑ Ðμ ""?

EDITAR: La entrada proviene de una página cargada con curl. Cuando envío el contenido de la página a mi navegador, los caracteres se muestran correctamente (así que dudo que la entrada sea el problema).

+0

¿Se puede publicar el código que está utilizando para crear el documento y el contenido importante en él? –

Respuesta

42

Probar:

$string = file_get_contents('your-xml-file.xml'); 
$string = mb_convert_encoding($string, 'utf-8', mb_detect_encoding($string)); 
// if you have not escaped entities use 
$string = mb_convert_encoding($string, 'html-entities', 'utf-8'); 
$doc = new DOMDocument(); 
$doc->loadXML($string); 
+0

Tuve este problema con un simple signo de £ y esta respuesta parece haberlo resuelto. Cabe señalar que si utiliza entidades html en la cadena, no podrá hacer loadXML, porque XML se quejará de entidades desconocidas; deberás usar loadHTML. Sin embargo, sospecho que hay una función que los convertirá en entidades como « o lo que sea. El problema es que esta no es realmente una buena respuesta porque hace que el texto sea ilegible, pero PHP es un poco notorio por problemas de codificación. – Altreus

+1

Esta respuesta me salvó el día, gracias. – Maerlyn

+0

Me gustaría señalar que puede agregar esta línea al final cuando obtiene el HTML resultante: '$ html = mb_convert_encoding ($ html, 'utf-8', 'html-entities');' Qué convierte algunas entidades html vuelven a sus valores originales. –

6

Agregar encabezado xml para que las etiquetas - intente esto:

$a = new DOMDocument(); 
$a->loadXml ('<?xml version="1.0" encoding="UTF-8"?><tag>Алекс М</tag>'); 
print htmlspecialchars ($a->saveXml()); 
19

que tenía un problema similar después de usar XPath para analizar DomDocument, y después de leer este

https://bugs.php.net/bug.php?id=32547

Lo he resuelto así

// Workaround because PHP 5.2.x has encoding problems, when we 
// update to PHP 5.3 this line is not necesserry any more 
$content = '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />' . $content; 

// Creating new DOM document and loading HTML content 
$dom_document = new DOMDocument('1.0', 'UTF-8'); 
$dom_document->substituteEntities = TRUE; 
$dom_document->loadHTML($content); 
+2

Gracias por publicar esto. Estoy manteniendo un servidor heredado ejecutando PHP 5.2.6 y he estado teniendo este problema exacto. Esto lo resolvió. –