忽略来自另一个<div>?</div>的未闭合标签

时间:2010-06-17 06:16:12

标签: html css

5 个答案:

答案 0 :(得分:4)

您可以将HTML代码段放到Tidy,这将尽力解决问题。许多语言以某种方式包含它,here例如PHP。

答案 1 :(得分:4)

我有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

&GT;

您可以使用此功能,如

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

答案 2 :(得分:1)

这不可能。

不要让用户使您的HTML无效。

如果您不想让用户修复错误,请尝试自动清除错误。

答案 3 :(得分:0)

答案 4 :(得分:0)

有一种方法可以使用HTML和JavaScript进行此操作。我不会为面向公众的网站推荐这种方法;您应该在数据到达浏览器之前清理它们。但它可能在其他情况下有用。

我们的想法是将可能无效的内容放入noscript标记中,如下所示:

<noscript class="contained">
    <div>Hi, my name is <b>John</div>
</noscript>

...然后添加将加载到DOM中的javascript。使用jQuery(但可能没有必要):

$("noscript.contained").each(function () {
    $(this).replaceWith(this.innerText);
});

请注意,没有javascript的用户仍会遇到您要避免的“流血”。