就是指定限制长度,截取含html标签的文本的前面部分,如果有html闭合标签被截掉了,要求能自动补全网上搜索到一些,但是经测试都有些bug,有哪位用过的能推荐一下呢?谢谢!

解决方案 »

  1.   

    建议你用正则表达式  前提是有规律可寻 否则的话 你这个要判断所有的html标签 很麻烦实现的话
      

  2.   

    就是非常复杂才要求现成的可靠成品啊,我想应该有吧,其实这个需求在做web开发时候还是比较普遍需要用到了,例如对完整文章做摘要什么的。
      

  3.   

    1. #region 清除HTML标记
            public static string DropHTML(string Htmlstring)
            {
                //删除脚本  
                Htmlstring = Regex.Replace(Htmlstring, @"<script[^>]*?>.*?</script>", "", RegexOptions.IgnoreCase);
                //删除HTML  
                Htmlstring = Regex.Replace(Htmlstring, @"<(.[^>]*)>", "", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"-->", "", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"<!--.*", "", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);", "\"", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);", "&", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(lt|#60);", "<", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(gt|#62);", ">", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(nbsp|#160);", " ", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(iexcl|#161);", "\xa1", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(cent|#162);", "\xa2", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(pound|#163);", "\xa3", RegexOptions.IgnoreCase);
                Htmlstring = Regex.Replace(Htmlstring, @"&(copy|#169);", "\xa9", RegexOptions.IgnoreCase);            Htmlstring = Regex.Replace(Htmlstring, @"&#(\d+);", "", RegexOptions.IgnoreCase);
                Htmlstring.Replace("<", "");
                Htmlstring.Replace(">", "");
                Htmlstring.Replace("\r\n", "");
                Htmlstring = HttpContext.Current.Server.HtmlEncode(Htmlstring).Trim();
                return Htmlstring;
            }
            #endregion2.#region 截取字符长度
            /// <summary>
            /// 截取字符长度
            /// </summary>
            /// <param name="inputString">字符</param>
            /// <param name="len">长度</param>
            /// <returns></returns>
            public static string CutString(string inputString, int len)
            {
                ASCIIEncoding ascii = new ASCIIEncoding();
                int tempLen = 0;
                string tempString = "";
                byte[] s = ascii.GetBytes(inputString);
                for (int i = 0; i < s.Length; i++)
                {
                    if ((int)s[i] == 63)
                    {
                        tempLen += 2;
                    }
                    else
                    {
                        tempLen += 1;
                    }                try
                    {
                        tempString += inputString.Substring(i, 1);
                    }
                    catch
                    {
                        break;
                    }                if (tempLen > len)
                        break;
                }
                //如果截过则加上半个省略号 
                byte[] mybyte = System.Text.Encoding.Default.GetBytes(inputString);
                if (mybyte.Length > len)
                    tempString += "…";
                return tempString;
            }
            #endregion
      

  4.   

    你好,我不是要提取,是要截取,截取的意思就是html需要保留,例如如果被截取部分由img标签,截取出来仍然要有,如果截取部分由前半个<p>,则要自动补全</p>
      

  5.   

    有点难度哦。要匹配所有的HTML标签是否正对又不是匹配截取之前的一个。
      

  6.   

    str html内容
    star 起始标记
    end 截止标记
    ignoreCase 区分大小写
    key 0-3 截取出来的内容是否包含起始或截止标记public string getStrData(string str, string star, string end,int c2,bool ignoreCase, int key)
            {
                CompareInfo Compare = CultureInfo.InvariantCulture.CompareInfo;
                int a = -1, b = -1;
                for(int i = 0; i < c2; i++)
                {
                    if (!ignoreCase)
                    {
                        if(i == 0)
                            a = str.IndexOf(star);
                        else
                            a = str.IndexOf(star, a + star.Length);
                    }
                    else
                    {
                        if (i == 0)
                            a = Compare.IndexOf(str, star, CompareOptions.IgnoreCase);
                        else
                            a = Compare.IndexOf(str, star, a + star.Length, CompareOptions.IgnoreCase);
                    }
                    if (a == -1) return "";
                }
                if (a == -1) return "";
                if (!ignoreCase)
                    b = str.IndexOf(end, a + star.Length);
                else
                    b = Compare.IndexOf(str, end, a + star.Length, CompareOptions.IgnoreCase);
                string s = "";
                if(b == -1)
                {
                    if(key == 0)
                    {
                        s = str.Substring(a + star.Length, str.Length - a - star.Length);
                    }
                    else if(key == 1)
                    {
                        s = str.Substring(a, str.Length - a);
                    }
                    else if(key ==2)
                    {
                        s = str.Substring(a + star.Length, str.Length - a - star.Length);
                    }
                    else
                    {
                        s = str.Substring(a, str.Length - a);
                    }
                }
                else
                {
                     if (key == 0)
                    {
                        s = str.Substring(a + star.Length, b - a - star.Length);
                    }
                    else if (key == 1)
                    {
                        s = str.Substring(a, b - a);
                    }
                    else if (key == 2)
                    {
                        s = str.Substring(a + star.Length, b - a - star.Length + end.Length);
                    }
                    else
                    {
                        s = str.Substring(a, b - a + end.Length);
                    }
                }
                return s;
            }