对于用户上传不规划Html而导致页面布局错乱的一简单解决方法

本文介绍了一种通过比较HTML内容中的开始div标签与结束div标签数量来验证HTML内容是否完整的简单方法,并提供了相应的C#代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在大多网站中都允许用户使用“Html在线编辑器”类的程序发表日记、评论等,好处当然是可以提供丰富的功能,不过用户的电脑知识有深有浅、素质也是有高有低,也就会出现一些不规则的Html破坏版面。

作为开发人员,也是想近办法屏蔽或修正这些不规则的Html,一般方法就是使用正则表达式进行匹配查找。

有一种破坏版面布局的Html本身并没有使用特殊的标记,只是会缺少开始或结束标签,比如:

 

< div  style ="color:#666;" >
这里是内容
< strong > 这里是加粗的内容 </ strong >
很明显,上面的内容缺少了结束div标签:</div>
我曾在网上搜索验证html内容是否完整的方法,不过没有找到好的方法(有示例说可以用 SgmlReader转成XML,只是我需要的还是Html,这样转来转去会很麻烦)
今天换了一种思考方式:通过判断html内容中的开始div标签与结束div标签的数量是否一致来大概验证html内容的是否不完整,代码如下:

复制代码
public   static   string  RenderHtml( this  HtmlHelper helper,  string  htmlContent)
        {
            htmlContent 
=  NoScriptText(htmlContent); // 去掉脚本、注释、style、<body>、<html>、<marquee>等特殊字符、标签
             int  divLen  =   0 ;
            
int  endDivLen  =   0 ;
            MatchCollection m 
=  Regex.Matches(htmlContent,  @" (<div>)|(<div .*?>) " , RegexOptions.IgnoreCase  |  RegexOptions.Compiled  |  RegexOptions.Singleline);
            divLen 
=  m.Count;
            m 
=  Regex.Matches(htmlContent,  @" </div> " , RegexOptions.IgnoreCase  |  RegexOptions.Compiled  |  RegexOptions.Singleline);
            endDivLen 
=  m.Count;
            
if  (endDivLen  !=  divLen)
            {
                
if  (divLen  >  endDivLen)
                {
                    
for  ( int  i  =   0 ; i  <  divLen  -  endDivLen; i ++ )
                    {
                        htmlContent 
+=   " </div> " ;
                    }
                }
                
else
                {
                    
for  ( int  i  =   0 ; i  <  endDivLen  -  divLen; i ++ )
                    {
                        htmlContent 
=   " <div> "   +  htmlContent;
                    }
                }
            }
            
return  htmlContent;
        }
复制代码

 

调用:

 

< div  class ="article_content" >
<% = Html.RenderHtml(Model.Content)  %>
</ div >
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值