首页 > 解决方案 > 检测字符串是否包含未闭合的 html 标签 [php]

问题描述

我想知道是否有可能检测字符串是否包含未关闭的标签,如果是这样,请剥离该标签或关闭他。所以例如我有:

<p>lorem ipsum dolor..</p> some other text <em> em tag unclosed

如您所见,有未关闭的标签,如果我们将其呈现为 HTML,则会导致浏览器出现问题。所以我想关闭那个标签或者如果没有关闭就剥离他(剥离实际上很容易,难的是检测)。

这在PHP中可能吗?

标签: phphtmltags

解决方案


您可以为此使用DOMDocument

$doc = new \DomDocument();
$stringToTest = \mb_convert_encoding($stringToTest, 'HTML-ENTITIES', 'UTF-8');
$doc->loadHTML($stringToTest, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
echo $doc->saveHTML();

对于您产生的示例

<p>lorem ipsum dolor..<p> some other text <em> em tag unclosed</em></p></p>

注意:首先,最好不要生成损坏的 HTML。作为备份,您应该将其留给修复它的浏览器(因为浏览器在这方面非常出色)。


推荐阅读