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

Quando provo ad ottenere il contenuto del seguente codice utilizzando le funzioni DOMDocument, restituisce qualcosa come:PHP con DOMDocument

ÐÐ»ÐµÐºÑ Ðœ 

Ho provato a installare DOMDocument codifica su valori diversi (UTF 8, ISO-8859-1), usando mb_convert_encoding, iconv e utf8_encode ma senza successo.

Come posso ottenere "Алекс М" anziché "Ðл ÐμÐºÑ Ðœ "?

MODIFICA: L'input proviene da una pagina caricata con arricciatura. Quando invio il contenuto della pagina al mio browser, i caratteri sono visualizzati correttamente (quindi dubito che l'input sia il problema).

+0

Puoi pubblicare il codice che stai utilizzando per creare il documento e importare il contenuto in esso? –

risposta

42

Prova:

$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

Ho avuto questo problema con un semplice simbolo £ e questa risposta sembra averlo risolto. Va notato che se si utilizzano le entità html sulla stringa, non sarà possibile eseguire loadXML, poiché XML si lamenterà di entità sconosciute; dovrai usare loadHTML. Tuttavia, ho il sospetto che ci sia una funzione che li convertirà in entità come « o qualsiasi altra cosa. Il problema è che questa non è una buona risposta perché rende il testo illeggibile, ma PHP è un po 'famoso per i problemi di codifica. – Altreus

+1

Questa risposta mi ha salvato la giornata, grazie. – Maerlyn

+0

Vorrei notare che è possibile aggiungere questa riga alla fine quando si ottiene l'HTML risultante: '$ html = mb_convert_encoding ($ html, 'utf-8', 'html-entities');' Che converte alcune entità html tornano ai loro valori originali. –

6

Aggiungi intestazione xml a voi tag - provare questo:

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

ho avuto un problema simile dopo l'utilizzo di XPath per analizzare DomDocument, e dopo aver letto questo

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

Ho risolto il problema in questo modo

// 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

Grazie per aver postato questo. Sto mantenendo un server legacy con PHP 5.2.6 e sto avendo questo problema esatto. Questo l'ha risolto. –

Problemi correlati