substring完美截取HTML字符

来源:互联网 发布:飞飞cms影视系统3.0 编辑:程序博客网 时间:2024/05/17 09:20
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(" ", "");                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();            }        }