我的SQL数据库中有很多用户发表的文章,都包含HTML代码的数据.
我现在想通过一个方法把每篇文章的前300个字符提取出来,以致在一页面中显示多篇文章的主要内容,同时也保留原来文章的显示格式.
   但在过程中,我遇到了以下问题:
   我并不想打断HTML代码,如<TABLE></TABLE>只提取了一半<TABLE>,那么这样的话,就会影响我网页框架的布局,HTML代码中什么都包含,如IMG,TABLE,OBJECT...如果一当没有成对的提取这些HTML标识的话,我后面的布局就完全被打乱了.
   请问大家有什么好的方法?

解决方案 »

  1.   

    暂时没啥好办法, 可以考虑indexof判断比如截取后的字符串判断<table>是否是在</table>出现之后..那就人为再补上一个
      

  2.   

    难办,如果是格式良好的 xml 是有办法的,html 语法不严,不好分析,
      

  3.   

    /// <summary>
            /// 过滤字符串中非文字字符
            /// </summary>
            /// <param name="HtmlStr">要过滤的字符</param>
            /// <returns>返回过滤后的字符</returns>
            public static string FiterHTML(string HtmlStr)
            {
                System.Text.RegularExpressions.Regex objReg = new System.Text.RegularExpressions.Regex(@"<[\s\S]*?>",
                    System.Text.RegularExpressions.RegexOptions.Multiline);
                int i = 0;
                while (objReg.IsMatch(HtmlStr, 0) && i < HtmlStr.Length)
                {
                    HtmlStr = objReg.Replace(HtmlStr, ""); i++;
                }
                return HtmlStr;
            }过滤掉HTML的标签,然后用SubString
      

  4.   

    我也遇见这问题,完全保留格式太难了,最后我没办法,把table之类的全部用正则去掉了.再截300个字.图片和<object之类的相对简单点,一般这种数量都不会很多.我的操作是:把这些标签的内容全找出来并替换成特殊字符(不常见的).然后截取300个字,再找其中的特殊字符一一对应替换回来,这样就能保证不会被截断.