Comment faire pour forcer le chemin XPath de l'utilisation de l'utf-8?
J'ai un document XHTML passé à une PHP app via Greasemonkey AJAX. Le PHP app utilise UTF8. Si j'ai sortie le contenu du POSTE directement à un textarea dans l'AJAX de réception div, tout est toujours correctement encodé en UTF8.
Lorsque j'essaie de l'analyser à l'aide de XPath
$dom = new DOMDocument();
$dom->loadHTML($raw2);
$xpath = new DOMXPath($dom);
$query = '//td/text()';
$nodes = $xpath->query($query);
foreach($nodes as $node) {
var_dump($node->wholeText);
}
sous-évaluées chaînes ne sont pas en utf8. Comment puis-je forcer DOM/XPath pour utiliser l'UTF8?
- pouvez-vous fournir un (testé) exemple de document html?
Vous devez vous connecter pour publier un commentaire.
Si c'est un à part entière valide xhtml document que vous ne devriez pas utiliser loadhtml() mais load()/loadxml().
Donné l'exemple de document xhtml
le script
imprime
c'est à dire la sortie/les chaînes de caractères sont codés en utf-8
J'ai eu le même problème et je ne pouvais pas utiliser rangé dans mon serveur.
J'ai trouvé cette solution, et il a bien fonctionné:
Je n'ai pas essayé, mais le deuxième paramètre de
DOMDocument::__construct
semble être lié à l'encodage ; peut-être que ça vous aidera à vous 🙂D'autre, il y a un propriété de codage dans DOMDocument, qui est accessible en écriture.
La DOMXpath être construit avec le DOMDocument comme paramètre, peut-être que ça marchera...
$dom->encoding = 'utf8'
a eu aucun effet, ni de réglage de l'encodage dans__construct()
. Peut-être due à l'utilisation deloadHTML()
, mais je ne sais pas.Un peu en retard dans le jeu, mais peut-être que cela aide quelqu'un...
Le problème est peut-être dans la sortie, et pas dans les dom/xpath objet lui-même.
Si vous serait sortie de la nodeValue directement, vous obtenez les caractères corrompus par exemple:
Vous devez charger votre objet dom avec le second param "utf-8",
new \DomDocument('1.0', 'utf-8')
, mais encore lorsque vous imprimez le nœud dom liste/valeur de l'élément vous obtenez cassé caractères:echo $contentItem->item($index)->nodeValue
vous avez de l'envelopper avec utf8_decode:
echo utf8_decode($contentItem->item($index)->nodeValue)
//output: 者不終朝而會,愚者可浹旬而學
Lutté avec problème similaire (incapable de forcer Xpath pour utiliser l'UTF-8 en combinaison avec loadHTML), à la fin de cet excellent article a fourni la solution:
http://devzone.zend.com/article/8855