自动闭合html代码

hjxxx 2007-01-27 08:42:42
在写程序的时候需要截取一定长度的字符串,但截取的字符串中可能会有未结束的html标签,这样在显示的时候便会将页面格式打乱。希望各位高手帮忙写个自动闭合html的代码,感激不尽。
...全文
254 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
haiben080808 2009-01-17
  • 打赏
  • 举报
回复
#region 闭合HTML代码
public static string CloseHTML(string str)
{
string[] HtmlTag = new string[] { "p", "div", "span", "table", "ul", "font", "b", "u", "i", "a", "h1", "h2", "h3", "h4", "h5", "h6" };

for (int i = 0; i < HtmlTag.Length; i++)
{
int OpenNum = 0, CloseNum = 0;
Regex re = new Regex("<" + HtmlTag + "[^>]*" + ">", RegexOptions.IgnoreCase);
MatchCollection m = re.Matches(str);
OpenNum = m.Count;
re = new Regex("</" + HtmlTag + ">", RegexOptions.IgnoreCase);
m = re.Matches(str);
CloseNum = m.Count;

for (int j = 0; j < OpenNum - CloseNum; j++)
{
str += "</" + HtmlTag + ">";
}
}

return str;
}
#endregion
hjxxx 2007-01-27
  • 打赏
  • 举报
回复
恩,谢谢你的帮忙
cpp2017 2007-01-27
  • 打赏
  • 举报
回复
应该可以,你可尝试一下.
hjxxx 2007-01-27
  • 打赏
  • 举报
回复
想到了,oldStr//原始字符串
int i,j;//i为所有开始标签,j为结束标签
string[] tags={"div","a","table"};//要检测的标签集合
而后
循环下,最后在oldStr的结尾处添加i-j个结束标签"</"+tags+">"
这样大概就能解决问题了吧
cpp2017 2007-01-27
  • 打赏
  • 举报
回复
然后检测截取的字符串,从第一个标签开始,找不到匹配的如<div>,str="</div>", 再检测到如"<table>",str="</table></div>" ============= 这样理论上是可以的,但是嵌套就会比较麻烦. 可能要用到栈
cpp2017 2007-01-27
  • 打赏
  • 举报
回复
string str = "<TR><TD>aa<div>b"; Regex reg = new Regex(@"<([^>\s]*)([^>]*?)>([^>]*?)(?!\1)"); str = reg.Replace(str,"<$1$2>$3</$1>"); Response.Write(Server.HtmlEncode(str)); 这样子得到的顺序有问题.
hjxxx 2007-01-27
  • 打赏
  • 举报
回复
string str;//要添加的字符串

然后检测截取的字符串,从第一个标签开始,找不到匹配的如<div>,str="</div>",
再检测到如"<table>",str="</table></div>"

这样应该成了吧
cpp2017 2007-01-27
  • 打赏
  • 举报
回复
就好像嵌套,比如要先添加</div></td></tr></TABLE>这个顺序也不能乱.
hjxxx 2007-01-27
  • 打赏
  • 举报
回复
谢谢cpp2017(慕白兄)的关注

其实不用考虑位置的,直接在结尾添加就可以了
如<div><div></div><table><tr><td>asdasdasd 这样一段代码,我在后面加上</table></div>便成,这样版式就不会乱。不过我不知道怎么去用正则来找出未结束的标签,并在字段结尾加上结束标签
cpp2017 2007-01-27
  • 打赏
  • 举报
回复
用正则倒是可以检测是否有闭合,但要自动补上,补上的位置不好确定.
cpp2017 2007-01-27
  • 打赏
  • 举报
回复
难.

62,052

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧