所做网站有意新闻部分,数据库中保存的是FREETEXTBOX内容,即含各种标签、图片、链接、文字、表格等,现在如果要做一个内容预览,比如截取文章的前64字节的内容作为预览,若超过64字节则加上,不知有什么好的办法?如果有普通的截取前几十位很有可能截到得是标签,可能造成没有文字或是无结束标签。

解决方案 »

  1.   

    1、建议在做的时候把新闻描述和新闻内容分成两个字段,这样就可以避免很多问题了
    2、找一个过滤网页标记的方法,包括可能的word标记,然后先过滤掉,再截取。
      

  2.   

    先做解码,再调用GetCut函数截一部分                <p>
                        <%# GetCut(Server.HtmlDecode(Eval("Content").ToString()),150) %> 
                    </p>        public string GetCut(object content, int num)
            {
                if (content.ToString().Length > num - 2)
                    return content.ToString().Substring(0, num - 2) + "...";
                else
                    return content.ToString();
            }
      

  3.   

    System.Text.RegularExpressions.Regex.Replace(content,@"<\/?[^>]+>","")
    用正则把HTML标记清楚,然后再截取文章的描述信息,并存储
      

  4.   

    lz说的就是开头有一段说明,后面加...,点击时候查看详情,建议还是将内容分成两端存储,一个字段用来存储FreeTextBox。text,另一个字段存储FreeTextBox。removeHtmlText。ToString()。substring(0,64)应该可以,如果直接从FreeTextBox中截取会有错误,将好多html字符计算在内。出现错误。
      

  5.   


            /// <summary>
            /// 截取字符串,中文按两个字符处理
            /// </summary>
            /// <param name="stringToSub"></param>
            /// <param name="length"></param>
            /// <returns></returns>
            public static string GetFirstString(string stringToSub, int length)
            {
                //Regex regex = new Regex("[\u4e00-\u9fa5]+", RegexOptions.Compiled);匹配汉字
                Regex regex = new Regex("[^x00-xff]+", RegexOptions.Compiled);//匹配双字节字符            char[] stringChar = stringToSub.ToCharArray();
                StringBuilder sb = new StringBuilder();
                int nLength = 0;
                bool isCut = false;
                for (int i = 0; i < stringChar.Length; i++)
                {
                    if (regex.IsMatch((stringChar[i]).ToString()))
                    {
                        sb.Append(stringChar[i]);
                        nLength += 2;
                    }
                    else
                    {
                        sb.Append(stringChar[i]);
                        nLength = nLength + 1;
                    }                if (nLength > length)
                    {
                        isCut = true;
                        break;
                    }
                }
                //if (isCut)
                //return sb.ToString() + "...";
                //else
                return sb.ToString();
            }中文双字节