在写程序的时候需要截取一定长度的字符串,但截取的字符串中可能会有未结束的html标签,这样在显示的时候便会将页面格式打乱。希望各位高手帮忙写个自动闭合html的代码,感激不尽。
解决方案 »
- 关于IT行业分嵌入式开发方向和数据库开发方向的求助?
- asp.net网页模型中用Request.QueryString传递值遇到了麻烦的问题
- guid作为参数查询数据库,出现的不能把String强制转换成GUID
- asp.net分页问题
- asp.net listbox绑定问题
- 自定义控件保持更改后的ID
- 不是我疯了,就是你们疯了!!!一个人同时做4个系统!!!
- asp.net网站发布遇到的问题
- 怎样在Asp.net的treeview上点击文字即可展开(收缩)子节点
- 100分求购IBUYSPY架构的中文说明书(C#版)
- 请教datalist,repeater等控件如何检测没数据时,显示“当前没有任何记录”
- ajax返回xml的问题
如<div><div></div><table><tr><td>asdasdasd 这样一段代码,我在后面加上</table></div>便成,这样版式就不会乱。不过我不知道怎么去用正则来找出未结束的标签,并在字段结尾加上结束标签
再检测到如"<table>",str="</table></div>"这样应该成了吧
Regex reg = new Regex(@"<([^>\s]*)([^>]*?)>([^>]*?)(?!\1)");
str = reg.Replace(str,"<$1$2>$3</$1>");
Response.Write(Server.HtmlEncode(str));这样子得到的顺序有问题.
再检测到如"<table>",str="</table></div>"
=============
这样理论上是可以的,但是嵌套就会比较麻烦.
可能要用到栈
int i,j;//i为所有开始标签,j为结束标签
string[] tags={"div","a","table"};//要检测的标签集合
而后
循环下,最后在oldStr的结尾处添加i-j个结束标签"</"+tags+">"
这样大概就能解决问题了吧
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