DOM xpath ломает кавычки - PullRequest
1 голос
/ 29 марта 2012

Я пытаюсь проанализировать некоторый HTML-текст в кодировке UTF-8, который содержит левую и правую кавычки Но когда я пытаюсь вернуть значение html из DOM с помощью saveHTML (), кавычки всегда портятся.

Теперь я попробовал несколько, в том числе utf8_encoding текста перед тем, как поместить его в DOM, я попытался вставить ('1.0', 'UTF-8') в конструктор, и он также не работал.

У меня заканчиваются идеи, как с этим разобраться. Преобразование кавычек в html-объекты для меня не вариант.

Вот упрощенный пример, который разделяет кавычки:

$a = "<html><body><div>won’t you, will you, won’t you, join the </div></body></html>";
$dom = new DOMDocument();

$dom->loadHTML($a);

$xpath = new DOMXPath($dom);

$tag = $xpath->query('//div');

foreach($tag as $t)
    echo $dom->saveHTML($t);

возвращенный текст выглядит так: присоединитесь, не присоединитесь ли вы к

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Хорошо, если вы настаиваете на использовании loadHTML, попробуйте следующее:

сначала добавьте соответствующий метатег в html, например:

$a = "<html>
    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">
<body><div>won’t you, will you, won’t you, join the </div></body></html>";

Тогда вы можете использовать loadHTML ($ a), и он будет работать

Наконец, вы просто не можете добавить дополнительный метатег, тогда вы можете попробовать это: использовать $ dom-> loadHTML (utf8_decode ($ a)); это также будет работать, так как сначала он преобразует вашу строку в latin-1 из utf8, который затем будет загружен в dom в кодировке latin-1, и вы также получите вывод как latin-1.

1 голос
/ 29 марта 2012

Решение, похоже, состоит в том, чтобы использовать $ dom-> loadXML ($ a) вместо loadHTML (). Я попробовал, и это сработало для меня.

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