• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    asp.net(文章截取前几行作为列表摘要)无损返回HTML代码

    复制代码 代码如下:

    BR>        /* STRONG>时间很久远了,有码友要,我抄了下来,记得使用的时候还是有部分例外情况要处理,大部分是ok的。/STRONG>
            * 函数: 
            * 说明:无损返回HTML代码
            *      
            * 作者:卡斯Kas(QQ:10590916)
            * 修改:2010-12-13、
            */

            public static string LeftH(string str, int l)
            {
                //为了防止错误
                string odstr = str;
                bool isHtml = false;//判断截取开头是否是字符串
                int maxLen = str.Length;
                int n = 0, i = 0, b = 0, e = 0;
                string c, c2 = "", Start = "", EndLabel = "", AllLabel = "";
                if (l >= str.Length) return str;//截取字段大于字符长度

                bool isErr = false;
                try
                {
                while (n l i maxLen)
                {
                    //1
                    i++;
                    c = str.Substring(i - 1, 1);

                    string end2str = "";
                    try
                    {
                        end2str = str.Substring(i - 1, 2);
                    }
                    catch
                    {
                        end2str = "";
                    }
                    if (c == "" end2str != "/")
                    {
                        isHtml = true;
                        b = i;//记录一个位置
                        //5     解决非成对标签

                        string end2tag = "";
                        try
                        {
                            end2tag = str.Substring(i, 2);
                        }
                        catch
                        {
                            end2tag = "";
                        }

                        if (end2tag == "br")
                        {
                            isHtml = false;
                        }
                        if (str.Substring(i, 1).ToLower() == "%")
                        {
                            isHtml = false;
                        }
                        if (str.Substring(i, 1).ToLower() == "?")
                        {
                            isHtml = false;
                        }
                        else if (end2tag == "hr")
                        {
                            isHtml = false;
                        }
                        //5end
                    }
                    //1end

                    //2
                    if (c == "" end2str == "/")
                    {
                        c2 = str.Substring(i - 1, str.Substring(i - 1).IndexOf(">") + 1);
                        AllLabel = AllLabel.Substring(c2.Length);
                    }
                    //2end

                    Start = Start + c;//记录当前字符及其前面字符

                    if (!isHtml)
                    {
                        //6     较为准确的计数
                        try
                        {
                            if (str.Substring(i, 2).ToLower() == "br")
                            {
                            }
                            else if (str.Substring(i, 2).ToLower() == "hr")
                            {
                            }
                            else
                            {
                                n++;
                            }
                        }
                        catch
                        {
                            //如果出错,则返回纯文本(@"[^>]+>|/[^>]+>");
                            //odstr = Regex.Replace(odstr, @"[^>]+>|/[^>]+>", "", RegexOptions.IgnoreCase);
                            odstr = odstr.Replace("", "").Replace(">", ">");
                            if (l > odstr.Length) l = odstr.Length;
                            return odstr.Substring(0, l);
                        }
                        //6end
                    }
                    else
                    {
                        if (c == ">")//如果循环到>时,要处理的成对标签中间部分
                        {
                            if (isHtml)
                            {
                                EndLabel = str.Substring(b, i - b);//获取到>之间的代码
                                e = EndLabel.IndexOf(" ");//标签属性都有空格,以空格为分割,获取标签名
                                if (e > 0)
                                {
                                    EndLabel = "/" + EndLabel.Substring(0, e) + ">";
                                }
                                else
                                {
                                    EndLabel = "/" + EndLabel;
                                }
                                AllLabel = EndLabel + AllLabel;//记录当前结束标签,及所有有关结束标签
                            }
                            isHtml = false;//重置属性,从新开始
                        }
                    }
                    //4     当结束时,发现有未闭合的标签,则重新来一次
                    if (n + 1 >= l)
                    {
                        if (InStrN(Start, "") != InStrN(Start, ">"))
                        {
                            n--;
                        }
                    }
                    //4end
                }//end while

                }
                catch
                {
                    isErr = true;
                }

                string newReString = Start + AllLabel + "...";

                //最后再次验证
                Regex Rg = new Regex(".[^>/]+>", RegexOptions.Compiled);
                Regex Rg2 = new Regex(@"\s*/[a-z]\s*>", RegexOptions.Compiled);

                if (inStrLen(newReString, "") != inStrLen(newReString, ">"))
                {
                    isErr = true;
                }
                else if (inStrLen(newReString.Replace(""", "\""), "\"") % 2 == 1)
                {
                    isErr = true;
                }
                else if (Rg.Matches(newReString).Count != Rg2.Matches(newReString).Count)
                {
                    isErr = true;
                }
                if (isErr)
                {
                    odstr = odstr.Replace("", "").Replace(">", ">").Replace("\"", """).Replace("'", "'");
                    if (l > odstr.Length)
                    { newReString = odstr; }
                    else
                    {
                        try
                        {
                            newReString = odstr.Substring(0, l) + "...";
                        }
                        catch
                        {
                            newReString = odstr;
                        }
                    }
                }

                return newReString;//返回
            }

    您可能感兴趣的文章:
    • 适用与firefox ASP.NET无刷新二级联动下拉列表
    • asp.net Ext grid 显示列表
    • asp.net 自制的单选、多选列表实现代码
    • asp.net 下拉列表无级数据绑定实现代码
    • asp.net 新闻列表样式代码
    • ASP.NET对无序列表批量操作的三种方法小结
    • ASP.NET系统关键字及保留字列表整理
    • asp.net TreeView与XML三步生成列表树
    • ASP.NET批量操作基于原生html标签的无序列表的三种方法
    • asp.net新闻列表生成静态页之批量和单页生成
    • ASP.NET MVC5网站开发概述(一)
    • ASP.NET MVC5网站开发项目框架(二)
    • ASP.NET MVC5 网站开发框架模型、数据存储、业务逻辑(三)
    • ASP.NET MVC5网站开发用户注册(四)
    • ASP.NET MVC5网站开发用户登录、注销(五)
    • ASP.NET MVC5网站开发用户修改资料和密码(六)
    • ASP.NET MVC5网站开发文章管理架构(七)
    • ASP.NET MVC5网站开发添加文章(八)
    • ASP.NET MVC5网站开发显示文章列表(九)
    上一篇:c#委托与事件(详解)
    下一篇:asp.net 未能写入输出文件--“拒绝访问的解决办法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    asp.net(文章截取前几行作为列表摘要)无损返回HTML代码 asp.net,文章,截取,前,几行,