C#实现的html内容截取

原创 2012年02月09日 16:44:30
C#实现的html内容截断,得到文章列表中的摘要信息。一般博客的首页只显示文章的摘要,点击标题进入以后查看全文。

  下面是C#实现的html内容截断,获取html文章内容的摘要。效果还可以。

/// <summary>
        /// 按文本内容长度截取HTML字符串(支持截取带HTML代码样式的字符串)
        /// </summary>
        /// <param name="html">将要截取的字符串参数</param>
        /// <param name="len">截取的字节长度</param>
        /// <param name="endString">字符串末尾补上的字符串</param>
        /// <returns>返回截取后的字符串</returns>
        public static string HTMLSubstring(string html, int len, string endString)
        {
            if (string.IsNullOrEmpty(html) || html.Length <= len) return html;
            MatchCollection mcentiry, mchtmlTag;
            ArrayList inputHTMLTag = new ArrayList();
            string r = "",tmpValue;
            int rWordCount = 0, wordNum = 0, i = 0;
            Regex rxSingle = new Regex("^<(br|hr|img|input|param|meta|link)", RegexOptions.Compiled | RegexOptions.IgnoreCase)//是否单标签正则
                , rxEndTag = new Regex("</[^>]+>", RegexOptions.Compiled)//是否结束标签正则
                , rxTagName = new Regex("<([a-z]+)[^>]*>", RegexOptions.Compiled | RegexOptions.IgnoreCase)//获取标签名正则
                , rxHtmlTag = new Regex("<[^>]+>", RegexOptions.Compiled)//html标签正则
                , rxEntity = new Regex("&[a-z]{1,9};", RegexOptions.Compiled | RegexOptions.IgnoreCase)//实体正则
                , rxEntityReverse = new Regex("§", RegexOptions.Compiled)//反向替换实体正则
                ;
            html = html.Replace("§", "§");//替换字符§为他的实体“§”,以便进行下一步替换
            mcentiry = rxEntity.Matches(html);//收集实体对象到匹配数组中
            html = rxEntity.Replace(html, "§");//替换实体为特殊字符§,这样好控制一个实体占用一个字符
            mchtmlTag = rxHtmlTag.Matches(html);//收集html标签到匹配数组中
            html = rxHtmlTag.Replace(html, "__HTMLTag__");//替换为特殊标签
            string []arrWord = html.Split(new string[] { "__HTMLTag__" }, StringSplitOptions.None);//通过特殊标签进行拆分
            wordNum = arrWord.Length;
            //获取指定内容长度及HTML标签
            for (; i < wordNum; i++) {
                if (rWordCount + arrWord[i].Length >= len) r += arrWord[i].Substring(0, len - rWordCount) + endString;
                else r += arrWord[i];
                rWordCount += arrWord[i].Length;//计算已经获取到的字符长度
                if (rWordCount >= len) break;
                //搜集已经添加的非单标签,以便封闭HTML标签对
                if (i < wordNum - 1) {
                    tmpValue=mchtmlTag[i].Value;
                    if (!rxSingle.IsMatch(tmpValue))
                    { //不是单标签
                        if (rxEndTag.IsMatch(tmpValue)&&inputHTMLTag.Count>0) inputHTMLTag.RemoveAt(inputHTMLTag.Count - 1);
                        else inputHTMLTag.Add(tmpValue);
                    }
                    r += tmpValue;
                }

            }
            //替换回实体
            for (i = 0; i < mcentiry.Count; i++) r = rxEntityReverse.Replace(r, mcentiry[i].Value, 1);
            //封闭标签
            for (i = inputHTMLTag.Count - 1; i >= 0; i--) r += "</" + rxTagName.Match(inputHTMLTag[i].ToString()).Groups[1].Value + ">";
            return r;
        }

     

相关文章

javascript实现html内容截断得到摘要


来源:http://www.w3dev.cn/article/20120207/csharp-cut-off-html-content.aspx


MySQL-子查询(嵌套)

了解子查询的最好方法就是看例子现在我们来看看orders表和orderitems表orders表 orderitems表 现在我想要查找所有订购物品id为TNT2的客户,怎么查? orderit...

c:foreach 迭代一行显示2条数据

c:foreach 迭代一行显示2条数据 需求说明:原来是迭代一行一条数据,数据量多,加了翻页。但是勾选上一页数据项翻页后上一页数据没有带过来(不采用暂存),所以决定将数据挤一挤全部显示出...

C#winform datagridview 中显示HTML内容

  • 2017年06月01日 10:52
  • 4.2MB
  • 下载

C#封装的Html内容操作类

  • 2012年01月02日 19:05
  • 8KB
  • 下载

C# webBrowser 获取框架内Html页面内容

【转】C# webBrowser 获取框架内Html页面内容 [转] 利用webBrowser获取页面比较简单,MSDN下有示例,在这里不必多说。 可是一些 HTML ...
  • gold0523
  • gold0523
  • 2014年04月25日 00:39
  • 24048

(c#) Word文档的上传,保存,检索内容文字,转化成HTML 及(在检索 COM 类工厂 错误 80070005 解决方案)

下面实现的是由页面上传一个word文档,然后把该文档保存到工程目录的文件夹UploadWord下. 在页面上可以实现搜索word文档里里面是否含有某些文字内容,同时可以把Word文件转化为HTMl页面...

C#在Word中插入Html内容

同事遇到一个难题,就是在现有的Word模板中插入HTML内容,无论是HTML->Rtf,再插入Word,还是将HTML另存为xx.Doc然后用InsertFile插入都不是很好,格式会发生意外。因为H...

C#正则表达式 解析html+table tr td 内容

aspx页面获取方法:    var tbZHXX = GetWorldexWyHtml(s, @"id=""tbZHXX""", @"class=""GridCommonItem""", "Worl...

C#将内容附带的html标签去掉转成纯文本方法

将内容附带的html标签去掉转成纯文本方法,.net后台在接收或者获取html整段内容时候,可以调用此方法将内容中的html标签过滤掉,转换成纯文本...

正则表达式相关:C# RichTextBox显示html文本内容

这两天做了一个功能,需要将抓取到的网页html中的文本按格式显示在richtextbox中。可是richtextbox不识别html标签。本打算自己写个html解释器,但是需要花费时间太多了。既然是个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#实现的html内容截取
举报原因:
原因补充:

(最多只允许输入30个字)