dr ;博士
你需要解析輸入 HTML 。 使用 DOMDocument 類表示文檔,解析輸入,查找所有
標記( 使用 findElementsByTagName ),並退出它們的內容。
代碼
不幸的是,DOM模型非常低,並強制你自己循環訪問
標記的子節點,以便轉移它們。 如下所示:function escapeRecursively($node) {
if ($node instanceof DOMText)
return $node->textContent;
$children = $node->childNodes;
$content ="nodeName>";
for ($i = 0; $i length; $i += 1) {
$child = $children->item($i);
$content. = escapeRecursively($child);
}
return"$content$node->nodeName>";
}
現在,這裡函數可以用於轉義文檔中的每個
節點:function escapePreformattedCode($html) {
$doc = new DOMDocument();
$doc->loadHTML($html);
$pres = $doc->getElementsByTagName('pre');
for ($i = 0; $i length; $i += 1) {
$node = $pres->item($i);
$children = $node->childNodes;
$content = '';
for ($j = 0; $j length; $j += 1) {
$child = $children->item($j);
$content. = escapeRecursively($child);
}
$node->nodeValue = htmlspecialchars($content);
}
return $doc->saveHTML();
}
測試$string = '
Test
Some interesting text';
echo escapePreformattedCode($string);
產量:
Test
Some <em>interesting</em> text
請注意,DOM總是表示一個完整的完整的文檔文檔。 因此當DOM解析器獲取文檔 fragment 時,它會填充丟失的信息。 這使得輸出與輸入有潛在的不同。