DOM xpath打破引号

时间:2012-03-28 20:13:31

标签: php dom xpath

我正在尝试解析一些包含左右引号的UTF-8编码的html文本 但是当我尝试使用saveHTML()从DOM中获取html的值时,引号总是搞砸了。

现在我已经尝试了几个包括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 个答案:

答案 0 :(得分:1)

解决方案似乎是使用$ dom-&gt; loadXML($ a)而不是loadHTML() 我试过了,它对我有用。

答案 1 :(得分:1)

好的,如果你坚持使用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-&gt; loadHTML(utf8_decode($ a)); 这也会起作用,因为它会首先将你的字符串从utf8转换为latin-1,然后将其加载到latin-1字符集的dom中,你也会得到latin-1的输出。