.net中实现对文章内容分页实现程序

现在问题出来了,文章内容里面包含了很多HTML标签,用SubString进行截取那会把HTML标签也给截断,也在可能会在标签的属性中截开,这样我们得出来的字符串就是错乱的了。 因此在截取时,对HTML标签进行过滤。

  自己的表达能力有限,直接上代码。

   

 代码如下 复制代码

/// <summary>

        /// 得到分页后的数据
        /// </summary>
        /// <param name="param">文章内容</param>
        /// <param name="size">文章字数(不包含HTML)</param>
        /// <returns></returns>
        public static List<string> SubstringTo(string param, int size)
        {
            param = NoHTML(param);//过滤一些有Wap上面不能显示的HTML标签,你也不可不过滤
            var length = param.ToCharArray().Length;
            var being = 0;
            var list = new List<string>();
            while (true)
            {
                string str = SubstringToHTML(param, being, size, "", out being);
                list.Add(str);
                if (length <= being)
                {
                    break;
                }
            }
            return list;
        }
 

 /// <summary>

        /// 按字节长度截取字符串(支持截取带HTML代码样式的字符串)
        /// </summary>
        /// <param name="param">将要截取的字符串参数</param>
        /// <param name="length">截取的字节长度</param>
        /// <param name="end">字符串末尾补上的字符串</param>
        /// <returns>返回截取后的字符串</returns>
        public static string SubstringToHTML(string param, int being, int length, string end, out int index)
        {
            string Pattern = null;
            MatchCollection m = null;
            StringBuilder result = new StringBuilder();
            int n = 0;
            char temp;
            bool isCode = false; //是不是HTML代码
            bool isHTML = false; //是不是HTML特殊字符,如&nbsp;
            char[] pchar = param.ToCharArray();
            int i = 0;
            for (i = being; 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 (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;
                }
            }
            index = i + 1;
            result.Append(end);
            //去掉成对的HTML标记,我的正则表达式不好,所以这里写得不好,大家可以写个正则直接去掉所有的
            temp_result = Regex.Replace(temp_result, @"(?is)<p[^>]*?>.*?</p>", "$2", RegexOptions.IgnoreCase);
            temp_result = Regex.Replace(temp_result, @"(?is)<a[^>]*?>.*?</a>", "$2", RegexOptions.IgnoreCase);
            temp_result = Regex.Replace(temp_result, @"(?is)<img[^>]*>", "$2", RegexOptions.IgnoreCase);
            temp_result = Regex.Replace(temp_result, @"(?is)<br[^>]*>", "$2", RegexOptions.IgnoreCase);
            //用正则表达式取出标记
            Pattern = ("</([a-zA-Z]+)*>");
            m = Regex.Matches(temp_result, Pattern);
            ArrayList bengHTML = new ArrayList();
            foreach (Match mt in m)
            {
                bengHTML.Add(mt.Result("$1"));
            }
            //补全前面不成对的HTML标记
            for (int nn = bengHTML.Count - 1; nn >= 0; nn--)
            {
                result.Insert(0, "<" + bengHTML[nn] + ">");
            }
            //用正则表达式取出标记
            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 nn = endHTML.Count - 1; nn >= 0; nn--)
            {
                result.Append("</");
                result.Append(endHTML[nn]);
                result.Append(">");
            }
            return result.ToString();
        }

总结:

对文章分页与和数据库分页有一定的区别,它可以有很多种方法有一点就是大家常用的把文件分段保存到数据库,然后读出时判断来分页,另一种方法是我常用的就是利用编辑器的分页符在要分页的地方插入,然后读出时再利用分切函数分开,再利用for来进行分页,上面实现也是如此。

时间: 2024-10-30 10:46:08

.net中实现对文章内容分页实现程序的相关文章

php文章内容分页实例程序

将正文按照一定字符串进行分割,分割后在按照页码进行数组索引,将当前页码对应数组的值输出即可,好像说得够晕的,下面来个实例:  代码如下 复制代码 <?php $str = "asd啊<b>是</b>大叔大叔asd杀毒发[NextPage]生的啊师傅 <a href="asd">asd</a> 啊师傅asd a速度发啥地方"; //接收页码(如果不存在就为1) $page = $_REQUEST['page'] ?

深入分析PHP文章内容分页

 文章内容分页主要有两个办法: 办法一.按字数控制进行分页 按字数分页办法简单易用,但效果不好. 大致思想:首先.设定每页能容纳的最大字数:然后.计算文章内容的总字数,再由总字数和单页最大字数计算出出总页数.这样整个分页的准备工作就已经做好了. 具体到每一页的显示内容可以通过内容截取来实现.比如:页容纳500字,文章内容有2200字,那么当页面传递page=2时应该显示第501至1000之间的内容. 这种办法简单,但显示时可能会遇到麻烦,文章内容通常伴有HTML标签,进行内容切割时实现HTML标

帝国cms用火车头采集文章内容分页教程

火车头采集:文章内容分页采集教程 采集文章的时候,难免遇到文章有分页,本教程讲解下内容分页的采集. 在规则的第二步:采集内容规则左下方有个"分页获取规则"选项卡,用来设置分页.如下图: 全部列出模式适用于分页地址全部显示出来如下图: 上下页上n页下n页适用用分页地址列出一部分如下图 我们先说下上下页模式的分页,以采集这个地址http://www.zzarea.com/2013/0117/1358391833627.html为例 在第一页我们查看分页代码的情况如下: 在第三页分页代码的情

php文章内容分页并生成相应的htm静态页面代码_php技巧

复制代码 代码如下: <?php $url='test.php?1=1'; $contents="fjka;fjsa;#page#批量生成分成文件并且加上分页代码"; $ptext ='#page#'; ContentsPages($url,$contents,$ptext) /** * 函数名:ContentsPages * 功能:文章内容分页 * 参数:$url文章内容页URL 类型string,$contents文章内容页内容 类型string,$ptext分页标识 类型s

php文章内容分页并生成对应的htm静态文件实例

php教程 文章内容分页并生成对应的htm静态文件实例 $tmpBody = "fjka;fjsa;{page}批量生成分成文件并且加上分页代码";         $tmpUrl = 'www.jzread.com';     $tmpUrlarray = explode('.',$url);         $tmpArray = explode('{page}',$tmpBody);     $total = count($tmpArray);         if( $tota

php 文章内容分页并生成对应的htm静态文件实例

$tmpBody = "fjka;fjsa;{page}批量生成分成文件并且加上分页代码";          $tmpUrl = 'www.111cn.net';     $tmpUrlarray = explode('.',$url);          $tmpArray = explode('{page}',$tmpBody);     $total = count($tmpArray);          if( $total >1 )     {      $tmpS

Wordpress 2.8 实现文章内容分页教程

Wordpress更新到2.8后,其他一切都好,只是添加新文章时,page按钮没了.在Wordpress中文论坛找到了解决办法,于是写下来,以备后用 打开/wp-includes/js/quicktags.js 文件,查找下列代码: edButtons[edButtons.length]=new edButton("ed_more","more","<!--more-->","","t",-1)

dedecms文章内容分页标签实现自动分页

1.我们登录后面,然后找一篇文章编辑,如下图所示插入分页符 2.然后我们点击之后会看到,如下界面,少了css样式了 3.现在我们对htm页面进行一下调整,找到模板文件  代码如下 复制代码 <div class="fy" style="margin:30px; text-align:center;"><ul class="con-page">{dede:pagebreak/}</ul></div>

内容分页简单实现代码及祥解(C#)

分页 网上已经有用asp对文章内容分页显示的代码,我也没有用时间详细研究.今天发布了几篇超长的文章,为了方便网民的浏览,才定下心来写了下面的代码.因为我们的程序是C#.net编写的,关于C#如此的例子.资料网上一点也找不到:所以只好从程序结构开始分析,一点程序却用了半天的时候完成,汗颜!不足之处,请大家指点,有什么更好的方法请告知. 显示内容部分: ////定义变量int i,start,stop,t,stat,statt,pp,pagecount,pagesize;//变量初始值stat=0;