DOMDocument saveHTML错误地编码href属性

时间:2012-12-06 22:41:55

标签: php html domdocument

我正在使用DOMDocument加载一些用户贡献的HTML块然后操纵它们。看来(假设我正在做的一切正确),DOMDocument通过htmlentities运行href属性中的url。这使得我的查询字符串中带有&符号的锚标签出错了。

示例:

$html = <<<HTML
<a href="http://foo.com?bar=baz&foo=bar">Foo</a>
HTML;

$dom = new DOMDocument;
$dom->loadHTML($html);

echo $dom->saveHTML();

输出变为(请注意,网址中的&amp;转换为&amp;):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><a href="http://foo.com?bar=baz&amp;foo=bar">Foo</a></body></html>

此外,在致电$dom->loadHTML($html);期间,输出了以下警告......

  

警告:DOMDocument :: loadHTML():htmlParseEntityRef:expecting';'在   实体,行:1

我不知道这意味着什么。

我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

&符号用于有效/兼容的XHTML中以确定HTML实体字符。

请参阅此参考列表: http://www.w3schools.com/tags/ref_entities.asp

您的DOMDocument抱怨,因为它在路上检测到无效的字符定义,并在出路时进行了纠正。