概述
对于用户上传不规划Html而导致页面布局错乱的一简单解决方法
现在大多网站中都允许用户使用“Html在线编辑器”类的程序发表日记、评论等,好处当然是可以提供丰富的功能,不过用户的电脑知识有深有浅、素质也是有高有低,也就会出现一些不规则的Html破坏版面。
作为开发人员,也是想近办法屏蔽或修正这些不规则的Html,一般方法就是使用正则表达式进行匹配查找。
有一种破坏版面布局的Html本身并没有使用特殊的标记,只是会缺少开始或结束标签,比如:
<
div
style
="color:#666;"
>
这里是内容
< strong > 这里是加粗的内容 </ strong >
这里是内容
< 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;
}
{
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 >
<% = Html.RenderHtml(Model.Content) %>
</ div >
当然,上面的判断遇到一些特别的标记还是有可能出现问题的,不过会让问题出现的几率大大降低了
posted on
2009-04-30 18:04
BoolYang 阅读(
...) 评论(
...)
编辑
收藏
转载于:https://www.cnblogs.com/XiaoG/archive/2009/04/30/1445328.html
最后
以上就是调皮帅哥为你收集整理的对于用户上传不规划Html而导致页面布局错乱的一简单解决方法的全部内容,希望文章能够帮你解决对于用户上传不规划Html而导致页面布局错乱的一简单解决方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复