我有一个函数,使用Php的DOMDocument替换字符串中锚点的href属性。这里有一个片段:如何防止Php的DOMDocument对html实体进行编码?
$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($文本)环绕在DOCTYPE HTML,身体等标签$文本。我试图通过这样做而不是loadHTML():
$doc = new DOMDocument('1.0', 'UTF-8');
$node = $doc->createTextNode($text);
$doc->appendChild($node);
...
不幸的是,这编码所有的实体(包括锚点)。有谁知道如何关闭此功能?我已经彻底查看了文档并试图对其进行黑客入侵,但无法弄清楚。
谢谢! :)
loadHTML,不会发生实体转换。我最终通过运行mb_substr($ text,122,-19)以脆弱的方式解决了这个问题。从$ doc-> saveHTML()的结果。哎呀! :) $ text是一个带有占位符锚标记的翻译字符串,因此替换必须在运行时完成。我宁愿不分析整个文档,因为只解析翻译后的链接会很困难。 虽然好主意。 – thesmart 2009-04-27 17:50:42