在写程序的时候需要截取一定长度的字符串,但截取的字符串中可能会有未结束的html标签,这样在显示的时候便会将页面格式打乱。希望各位高手帮忙写个自动闭合html的代码,感激不尽。

解决方案 »

  1.   

    谢谢cpp2017(慕白兄)的关注其实不用考虑位置的,直接在结尾添加就可以了
    如<div><div></div><table><tr><td>asdasdasd 这样一段代码,我在后面加上</table></div>便成,这样版式就不会乱。不过我不知道怎么去用正则来找出未结束的标签,并在字段结尾加上结束标签
      

  2.   

    就好像嵌套,比如要先添加</div></td></tr></TABLE>这个顺序也不能乱.
      

  3.   

    string str;//要添加的字符串然后检测截取的字符串,从第一个标签开始,找不到匹配的如<div>,str="</div>",
    再检测到如"<table>",str="</table></div>"这样应该成了吧
      

  4.   

    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));这样子得到的顺序有问题.
      

  5.   

    然后检测截取的字符串,从第一个标签开始,找不到匹配的如<div>,str="</div>",
    再检测到如"<table>",str="</table></div>"
    =============
    这样理论上是可以的,但是嵌套就会比较麻烦.
    可能要用到栈
      

  6.   

    想到了,oldStr//原始字符串
    int i,j;//i为所有开始标签,j为结束标签
    string[] tags={"div","a","table"};//要检测的标签集合
    而后
    循环下,最后在oldStr的结尾处添加i-j个结束标签"</"+tags+">"
    这样大概就能解决问题了吧
      

  7.   

    #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