DOMDocument с проблемами кодирования XPath. [?] Много тестов - PullRequest
3 голосов
/ 07 января 2012
<code>$msg = "<body><a>áéíóú☻♥♦♣</a></body>";
$temp_dom = new DOMDocument();    
$temp_dom->loadHTML($msg);    
$dom_xpath = new DOMXpath($temp_dom);   
$ele = $dom_xpath->query('//a')->item(0);

echo "<pre>";
echo "Original: $msg\n";
echo $ele->nodeValue;     
echo "
";

Выход:

Original: áéíóú☻♥♦♣
áéíóúâ»â¥â¦â£

Текущая кодировка документа - utf-8. Я тоже попробовал ANSI и такая же проблема произошла.

utf8_decode решает проблему

echo utf8_decode($ele->nodeValue);

Но дело в том, что я использую множество атрибутов и множество функций, которые мне пришлось бы использовать в каждом из них utf8_decode, и я считаю, что это не правильно. Кто-то знает, как я могу это сделать?

Пожалуйста, используйте этот тест и протестируйте его перед публикацией результата, потому что я уже много чего пробовал.

Большое спасибо заранее.

1 Ответ

5 голосов
/ 07 января 2012

Проблема в том, что вам нужно сообщить DOMDocument, что такое кодировка при разборе HTML.Вы не можете сделать это, установив параметр encoding.(Я полагаю, что это влияет на способ вывода документа с saveHTML.)

Немного хакерский способ сделать это - вставить в документ оператор кодировки.Вы можете сделать это, просто вставив '<?xml encoding="UTF-8">' перед разбором HTML.

<code><?php

$msg = "<body><a>áéíóú☻♥♦♣</a></body>";
$temp_dom = new DOMDocument();    


$temp_dom->loadHTML('<?xml encoding="UTF-8">' . $msg);    
$temp_dom->encoding = 'UTF-8';
$dom_xpath = new DOMXpath($temp_dom);   
$ele = $dom_xpath->query('//a')->item(0);

echo "<pre>";
echo "Original: $msg\n";
echo $ele->nodeValue;     
echo "
";

Вывод:

Original: áéíóú☻♥♦♣
áéíóú☻♥♦♣

Обратите внимание, однако, что это вставляет дополнительный узел как дочерний элемент объекта документа (точнее, DOMProcessingInstruction), поэтому имейте это в виду, если вы что-то делаете с $temp_dom->childNodes или подобным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...