源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-07-10 02:01 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:asp.net(文章截取前几行作为列表摘要)无损返回HTML代码
[u]复制代码[/u] 代码如下:
<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;//返回         }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部