我有一個函數,使用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