簡體   English   中英

如何處理DOMDocument中的特殊HTML字符?

[英]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 &amp; 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM