[英]How to handle special HTML characters in DOMDocument?
假設我使用以下代碼構建HTML片段:
$dom = new DOMDocument();
$header = $dom->createElement("h2", "Lorem & Ipsum");
$dom->appendChild($header);
print($dom->saveHTML());
打印的原始HTML代碼包含未轉義的&
符號,而不是必需的HTML &
。 該代碼還會引發以下PHP錯誤:
警告:DOMDocument :: createElement():未終止的實體引用
處理此問題的最佳方法是什么?
PHP團隊似乎不願意更改此行為( source ),因此我們必須找到一種解決方法。
一種方法是簡單地自己在PHP代碼中進行編碼,如下所示:
$header = $dom->createElement("h2", "Lorem & Ipsum");
但是,這並不總是很方便,因為打印的文本可能在變量內,或包含&
以外的其他特殊字符。 因此,您可以使用htmlentities
函數。
$text = "Lorem & Ipsum";
$header = $dom->createElement("h2", htmlentities($text));
如果這仍然不是理想的解決方案,則另一個解決方法是使用textContent
屬性而不是createElement
中的第二個參數。
在下面的代碼中,我已經在DOMDocument
子類中實現了此功能,因此您只需要使用BetterDOM
子類即可解決此奇怪的錯誤。
class BetterDOM extends DOMDocument {
public function createElement($tag, $text = null) {
$base = parent::createElement($tag);
$base->textContent = $text;
return $base;
}
}
// Correctly prints "<h2>Lorem & Ipsum</h2>" with no errors
$dom = new BetterDOM();
$header = $dom->createElement("h2", "Lorem & Ipsum");
$dom->appendChild($header);
print($dom->saveHTML());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.