【发布时间】:2010-10-21 23:56:07
【问题描述】:
我有一个使用 PHP 的 DOMDocument 替换字符串中锚点的 href 属性的函数。这是一个sn-p:
$doc = new DOMDocument('1.0', 'UTF-8');
$doc->loadHTML($text);
$anchors = $doc->getElementsByTagName('a');
foreach($anchors as $a) {
$a->setAttribute('href', 'http://google.com');
}
return $doc->saveHTML();
问题在于 loadHTML($text) 在 doctype、html、body 等标签中包围了 $text。我尝试通过这样做而不是 loadHTML() 来解决这个问题:
$doc = new DOMDocument('1.0', 'UTF-8');
$node = $doc->createTextNode($text);
$doc->appendChild($node);
...
不幸的是,这会编码所有实体(包括锚点)。有谁知道如何关闭这个?我已经彻底查看了文档并尝试破解它,但无法弄清楚。
谢谢! :)
【问题讨论】:
-
对于 2022 年访问此内容的所有人:从 libxml 2.6 开始,
loadHTML支持防止添加周围 HTML 标记的选项:$contentDom->loadHTML($text, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
标签: php anchor href domdocument createtextnode