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

Lorsque je tente d'obtenir le contenu du code suivant à l'aide des fonctions DOMDocument, il retourne quelque chose comme:encodage PHP avec DOMDocument

ÐÐ»ÐµÐºÑ Ðœ 

J'ai essayé d'installer DOMDocument encodage à des valeurs différentes (UTF- 8, ISO-8859-1), en utilisant mb_convert_encoding, iconv et utf8_encode mais sans succès.

Comment puis-je obtenir "Алекс М" au lieu de "ÐÐ" ÐμÐºÑ Ðœ "?

EDIT: L'entrée provient d'une page chargée avec curl. Lorsque je publie le contenu de la page dans mon navigateur, les caractères s'affichent correctement (donc je doute que l'entrée soit le problème).

+0

Pouvez-vous poster le code que vous utilisez pour créer le document important et le contenu en elle? –

Répondre

42

Essayez:

$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

J'ai eu ce problème avec un simple signe de £ et cette réponse semble l'avoir résolu. Il convient de noter que si vous utilisez html-entités sur la chaîne, alors vous ne serez pas en mesure de le faire loadXML, parce que XML se plaindra d'entités inconnues; vous devrez utiliser loadHTML. Cependant, je soupçonne qu'il existe une fonction qui va les convertir en entités comme « ou autre. Le problème est, ce n'est pas vraiment une bonne réponse, car il rend le texte illisible, mais PHP est un peu notoire pour les problèmes d'encodage. – Altreus

+1

Cette réponse vient de sauver ma journée, merci. – Maerlyn

+0

Je voudrais noter que vous pouvez ajouter cette ligne à la fin lorsque vous obtenez le code HTML résultant: '$ html = mb_convert_encoding ($ html, 'utf-8', 'html-entities');' Qui convertit certaines entités html à leurs valeurs d'origine. –

6

Ajouter tête xml à balises vous - essayez ceci:

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

J'ai eu un problème similaire après avoir utilisé XPath pour analyser DomDocument, et après avoir lu ce

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

Je l'ai résolu comme ça

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

Merci d'avoir posté ce message. Je maintiens un serveur hérité exécutant PHP 5.2.6 et ai eu ce problème exact. Cela l'a résolu. –