我的网站要添加一篇文章,添加后要在首页显示这篇文章的前100字。由于文章是通过fck添加的所以文章中会有很多html标记,当文章长度多于100字时首页显示的文章会将100字后的文字连同html标记一起截断,导致首页html标记不匹配。
有高手遇到过这个问题吗??大侠们是怎么解决的??

解决方案 »

  1.   

    http://topic.csdn.net/u/20080829/14/458c71bb-3e9b-4a84-a1e5-8a66813ea208.html
    看一下我在五楼的回复
      

  2.   

    把你的方法粘过来供大家分享
    谢谢
    public string GetContentSummary(string content, int length, bool StripHTML)
            {
                if (string.IsNullOrEmpty(content) || length == 0)
                    return "";
                if (StripHTML)
                {
                    System.Text.RegularExpressions.Regex re = new System.Text.RegularExpressions.Regex("<[^>]*>");
                    content = re.Replace(content, "");
                    content = content.Replace(" ", "").Replace(" ", "").Replace("&nbsp;", "");
                    if (content.Length <= length)
                        return content;
                    else
                        return content.Substring(0, length) + "...";
                }
                else
                {
                    if (content.Length <= length)
                        return content;                int pos = 0, npos = 0, size = 0;
                    bool firststop = false, notr = false, noli = false;
                    System.Text.StringBuilder sb = new System.Text.StringBuilder();
                    while (true)
                    {
                        if (pos >= content.Length)
                            break;
                        string cur = content.Substring(pos, 1);
                        if (cur == "<")
                        {
                            string next = content.Substring(pos + 1, 3).ToLower();
                            if (next.IndexOf("p") == 0 && next.IndexOf("pre") != 0)
                            {
                                npos = content.IndexOf(">", pos) + 1;
                            }
                            else if (next.IndexOf("/p") == 0 && next.IndexOf("/pr") != 0)
                            {
                                npos = content.IndexOf(">", pos) + 1;
                                if (size < length)
                                    sb.Append("<br />");
                            }
                            else if (next.IndexOf("br") == 0)
                            {
                                npos = content.IndexOf(">", pos) + 1;
                                if (size < length)
                                    sb.Append("<br />");
                            }
                            else if (next.IndexOf("img") == 0)
                            {
                                npos = content.IndexOf(">", pos) + 1;
                                if (size < length)
                                {
                                    sb.Append(content.Substring(pos, npos - pos));
                                    size += npos - pos + 1;
                                }
                            }
                            else if (next.IndexOf("li") == 0 || next.IndexOf("/li") == 0)
                            {
                                npos = content.IndexOf(">", pos) + 1;
                                if (size < length)
                                {
                                    sb.Append(content.Substring(pos, npos - pos));
                                }
                                else
                                {
                                    if (!noli && next.IndexOf("/li") == 0)
                                    {
                                        sb.Append(content.Substring(pos, npos - pos));
                                        noli = true;
                                    }
                                }
                            }
                            else if (next.IndexOf("tr") == 0 || next.IndexOf("/tr") == 0)
                            {
                                npos = content.IndexOf(">", pos) + 1;
                                if (size < length)
                                {
                                    sb.Append(content.Substring(pos, npos - pos));
                                }
                                else
                                {
                                    if (!notr && next.IndexOf("/tr") == 0)
                                    {
                                        sb.Append(content.Substring(pos, npos - pos));
                                        notr = true;
                                    }
                                }
                            }
                            else if (next.IndexOf("td") == 0 || next.IndexOf("/td") == 0)
                            {
                                npos = content.IndexOf(">", pos) + 1;
                                if (size < length)
                                {
                                    sb.Append(content.Substring(pos, npos - pos));
                                }
                                else
                                {
                                    if (!notr)
                                    {
                                        sb.Append(content.Substring(pos, npos - pos));
                                    }
                                }
                            }
                            else
                            {
                                npos = content.IndexOf(">", pos) + 1;
                                sb.Append(content.Substring(pos, npos - pos));
                            }
                            if (npos <= pos)
                                npos = pos + 1;
                            pos = npos;
                        }
                        else
                        {
                            if (size < length)
                            {
                                sb.Append(cur);
                                size++;
                            }
                            else
                            {
                                if (!firststop)
                                {
                                    sb.Append("...");
                                    firststop = true;
                                }
                            }
                            pos++;
                        }                }
                    return sb.ToString();
                }
            }