如何关闭未关闭的HTML标签?

2022-08-30 12:38:47

每当我们从数据库或类似来源获取一些用户输入的内容并进行一些编辑时,我们可能会检索仅包含开始标记但没有结束的部分。

这可能会妨碍网站的当前布局。

是否有客户端或服务器端方法来解决此问题?


答案 1

为这个找到了一个很好的答案:

使用 PHP 5 并使用 DOMDocument 对象的 loadHTML() 方法。此自动解析格式不正确的 HTML,随后对 saveXML() 的调用将输出有效的 HTML。DOM 函数可以在这里找到:

http://www.php.net/dom

这个的用法:

$doc = new DOMDocument();
$doc->loadHTML($yourText);
$yourText = $doc->saveHTML();

答案 2

我有php的解决方案

<?php
    // close opened html tags
    function closetags ( $html )
        {
        #put all opened tags into an array
        preg_match_all ( "#<([a-z]+)( .*)?(?!/)>#iU", $html, $result );
        $openedtags = $result[1];

        #put all closed tags into an array
        preg_match_all ( "#</([a-z]+)>#iU", $html, $result );
        $closedtags = $result[1];
        $len_opened = count ( $openedtags );

        # all tags are closed
        if( count ( $closedtags ) == $len_opened )
        {
            return $html;
        }
        $openedtags = array_reverse ( $openedtags );

        # close tags
        for( $i = 0; $i < $len_opened; $i++ )
        {
            if ( !in_array ( $openedtags[$i], $closedtags ) )
            {
                $html .= "</" . $openedtags[$i] . ">";
            }
            else
            {
                unset ( $closedtags[array_search ( $openedtags[$i], $closedtags)] );
            }
        }
        return $html;
    }
    // close opened html tags
?>

您可以使用此功能,例如

   <?php echo closetags("your content <p>test test"); ?>