最近作的项目里,有个编辑器,但是由于使用者水平十分有限,经常是复制粘贴到编辑器里带有混合HTML代码的内容.
问题是里边经常出现些特殊的标记或者不完整的标记.
当我的页面显示的时候常被他们的HTML搞的乱七八糟.比如他们的代码里少个TABLE结尾或者类似的东西吧.
在编辑器里多少有点变形,但是却大面上还偏差不大,但是文章显示到我的页面里,页面结构越复杂,出来的结果就越匪夷所思!
想请教下该如何检查他们的文章里HTML的完整性?或者只检查部分特殊标记? 以及在页面上显示文章的时候有没有什么办法叫他们的代码无论出什么错误都别影响我页面本身的结构和效果?(IFRAME办法除外)
谢谢

解决方案 »

  1.   

    分数点错了,开了个加分贴
    http://topic.csdn.net/u/20080716/09/2351b022-34b6-4327-9cd1-a87212836cac.html两边一共80分,请能帮忙的朋友回答啊,不会亏了您.
      

  2.   

    http://blog.csdn.net/nopole/archive/2008/03/19/2197285.aspx楼主参考一下   这是我前段时间搞的    里面有你需要的东西 
      

  3.   

    FCKeditorV2 这个应该够楼主用
      

  4.   


    /*
      * 按字节长度截取字符串(支持截取带HTML代码样式的字符串)
      * @param param 将要截取的字符串参数
      * @param length 截取的字节长度
      * @param end 字符串末尾补上的字符串
      * @return 返回截取后的字符串
      */
      public static string subStringHTML(string param,int length,string end)
      {
       string Pattern = null;
       MatchCollection m = null;
       StringBuilder result = new StringBuilder();
       int n = 0;
       char temp;
       bool isCode = false; //是不是HTML代码
       bool isHTML = false; //是不是HTML特殊字符,如 
       char[] pchar = param.ToCharArray();
       for (int i = 0; i < pchar.Length; i++)
       {
        temp = pchar[i];
        if (temp == '<')
        {
         isCode = true;
        }
        else if (temp == '&')
        {
         isHTML = true;
        }
        else if (temp == '>' && isCode)
        {
         n = n - 1;
         isCode = false;
        }
        else if (temp == ';' && isHTML)
        {
         isHTML = false;
        }
        if (!isCode && !isHTML)
        {
         n = n + 1;
         //UNICODE码字符占两个字节
         if (System.Text.Encoding.Default.GetBytes(temp + "").Length > 1)
         {
          n = n + 1;
         }
        }
        result.Append(temp);
        if (n >= length)
        {
         break;
        }
       }
       result.Append(end);
       //取出截取字符串中的HTML标记
       string temp_result = result.ToString().Replace("(>)[^<>]*(<?)","$1$2");
       //去掉不需要结素标记的HTML标记
       temp_result = temp_result.Replace(@"</?(AREA|BASE|BASEFONT|BODY|BR|COL|COLGROUP|DD|DT|FRAME|HEAD|HR|HTML|IMG|INPUT|ISINDEX|LI|LINK|META|OPTION|P|PARAM|TBODY|TD|TFOOT|TH|THEAD|TR|area|base|basefont|body|br|col|colgroup|dd|dt|frame|head|hr|html|img|input|isindex|li|link|meta|option|p|param|tbody|td|tfoot|th|thead|tr)[^<>]*/?>",
        "");
       //去掉成对的HTML标记
       temp_result=temp_result.Replace(@"<([a-zA-Z]+)[^<>]*>(.*?)</\1>","$2");
       //用正则表达式取出标记
       Pattern = ("<([a-zA-Z]+)[^<>]*>");
       m = Regex.Matches(temp_result,Pattern);
       ArrayList endHTML = new ArrayList();
       foreach(Match mt in m)
       {
        endHTML.Add(mt.Result("$1"));
       }
       //补全不成对的HTML标记
       for (int i = endHTML.Count - 1; i >= 0; i--)
       {
        result.Append("</");
        result.Append(endHTML[i]);
        result.Append(">");
       }
       return result.ToString();
      }
    //望此方法对楼主有用
      

  5.   

    将用户输入<和>替换成实体&lt;和&gt;
      

  6.   

    我是要在WINDOWS SERVICE里处理 不能用FCK啊.