显示文章前100字导致html乱码 我的网站要添加一篇文章,添加后要在首页显示这篇文章的前100字。由于文章是通过fck添加的所以文章中会有很多html标记,当文章长度多于100字时首页显示的文章会将100字后的文字连同html标记一起截断,导致首页html标记不匹配。有高手遇到过这个问题吗??大侠们是怎么解决的?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://topic.csdn.net/u/20080829/14/458c71bb-3e9b-4a84-a1e5-8a66813ea208.html看一下我在五楼的回复 把你的方法粘过来供大家分享谢谢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(); } } 在js里判断窗口是否关闭的问题!高手帮帮忙 滚动条滚动无限长 asp传值的问题 MVC2路由问题 给出“正在读取数据...”的提示 高难度问题:如何正确获得远程页面的数据?(发了好几个帖,都没有人会) 本人想做个采集程序,需要得出一个网页中,开始字符串,到结束字符串的程序,这个开始字符串和结束字符串,有多个,得出来的数据保存到ArrayList中,谁知道正确的正则,望帖出谢谢,字符串比较的方法函数也可以,谢谢! 编码转换问题 有请思归,还是大文件的问题(结帖率100%) 请问在后台CS文件中怎样声明以下变量? VS2008 的 Javascript 超怪问题 解答个题目
看一下我在五楼的回复
谢谢
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();
}
}