3

我正在使用 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();

输出变为(注意 url 中的 & 被转换为&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: 期待 ';' 在实体中,行:1

我不知道那是什么意思。

我错过了什么吗?

4

1 回答 1

2

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

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

您的 DOMDocument 正在抱怨,因为它在输入时检测到无效的字符定义,并在输出时更正了它。

于 2012-12-06T23:00:47.340 回答