请教个在线编辑文章的问题.页面上编辑文章,如何检查里边的HTML是否完整? (加分贴) 原贴这里 http://topic.csdn.net/u/20080716/09/e0d021a2-9069-43ac-adcf-badcc1a82769.html 这里的分可以给你.这里是加分.回答问题请在那边和这边留名.谢谢.因为原贴还没来得及改分就给按错了.嘿嘿 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://blog.csdn.net/nopole/archive/2008/03/19/2197285.aspx楼主参考一下 这是我前段时间搞的 里面有你需要的东西 FCKeditorV2 这个应该够楼主用 /* * 按字节长度截取字符串(支持截取带HTML代码样式的字符串) * @param param 将要截取的字符串参数 * @param length 截取的字节长度 * @param end 字符串末尾补上的字符串 * @return 返回截取后的字符串 */ public static string subStringHTML(string param,int length,string end) { string Pattern = null; MatchCollection m = null; StringBuilder result = new StringBuilder(); int n = 0; char temp; bool isCode = false; //是不是HTML代码 bool isHTML = false; //是不是HTML特殊字符,如 char[] pchar = param.ToCharArray(); for (int i = 0; i < pchar.Length; i++) { temp = pchar[i]; if (temp == '<') { isCode = true; } else if (temp == '&') { isHTML = true; } else if (temp == '>' && isCode) { n = n - 1; isCode = false; } else if (temp == ';' && isHTML) { isHTML = false; } if (!isCode && !isHTML) { n = n + 1; //UNICODE码字符占两个字节 if (System.Text.Encoding.Default.GetBytes(temp + "").Length > 1) { n = n + 1; } } result.Append(temp); if (n >= length) { break; } } result.Append(end); //取出截取字符串中的HTML标记 string temp_result = result.ToString().Replace("(>)[^<>]*(<?)","$1$2"); //去掉不需要结素标记的HTML标记 temp_result = temp_result.Replace(@"</?(AREA|BASE|BASEFONT|BODY|BR|COL|COLGROUP|DD|DT|FRAME|HEAD|HR|HTML|IMG|INPUT|ISINDEX|LI|LINK|META|OPTION|P|PARAM|TBODY|TD|TFOOT|TH|THEAD|TR|area|base|basefont|body|br|col|colgroup|dd|dt|frame|head|hr|html|img|input|isindex|li|link|meta|option|p|param|tbody|td|tfoot|th|thead|tr)[^<>]*/?>", ""); //去掉成对的HTML标记 temp_result=temp_result.Replace(@"<([a-zA-Z]+)[^<>]*>(.*?)</\1>","$2"); //用正则表达式取出标记 Pattern = ("<([a-zA-Z]+)[^<>]*>"); m = Regex.Matches(temp_result,Pattern); ArrayList endHTML = new ArrayList(); foreach(Match mt in m) { endHTML.Add(mt.Result("$1")); } //补全不成对的HTML标记 for (int i = endHTML.Count - 1; i >= 0; i--) { result.Append("</"); result.Append(endHTML[i]); result.Append(">"); } return result.ToString(); }//望此方法对楼主有用 leon28 不中啊 我试了,所有的标记都给加到后边了. 页面生命周期,为什么要知道 求保留<IMG SRC="url" > <BR>标记 删除其他html标记的办法 我的asp.net困惑大全,望大家指点!感谢! VS打包和卸载(怎样使卸载后还原到未安装软件的状态) 数据库里没有的文件名,从硬盘中删除文件 怎么使用asp.net写程序检测邮件的新邮件数啊 登录问题(在线等)搞了好几天了,还是不行都快郁闷死了 初学用户控件,急!最好是vb.net .net 多条件查询,需要多表连接 sql server的问题请教? asp.net 伪目录(或则说是伪静态) e.Row.Cells(2).Attributes.Add 出错
/*
* 按字节长度截取字符串(支持截取带HTML代码样式的字符串)
* @param param 将要截取的字符串参数
* @param length 截取的字节长度
* @param end 字符串末尾补上的字符串
* @return 返回截取后的字符串
*/
public static string subStringHTML(string param,int length,string end)
{
string Pattern = null;
MatchCollection m = null;
StringBuilder result = new StringBuilder();
int n = 0;
char temp;
bool isCode = false; //是不是HTML代码
bool isHTML = false; //是不是HTML特殊字符,如
char[] pchar = param.ToCharArray();
for (int i = 0; i < pchar.Length; i++)
{
temp = pchar[i];
if (temp == '<')
{
isCode = true;
}
else if (temp == '&')
{
isHTML = true;
}
else if (temp == '>' && isCode)
{
n = n - 1;
isCode = false;
}
else if (temp == ';' && isHTML)
{
isHTML = false;
}
if (!isCode && !isHTML)
{
n = n + 1;
//UNICODE码字符占两个字节
if (System.Text.Encoding.Default.GetBytes(temp + "").Length > 1)
{
n = n + 1;
}
}
result.Append(temp);
if (n >= length)
{
break;
}
}
result.Append(end);
//取出截取字符串中的HTML标记
string temp_result = result.ToString().Replace("(>)[^<>]*(<?)","$1$2");
//去掉不需要结素标记的HTML标记
temp_result = temp_result.Replace(@"</?(AREA|BASE|BASEFONT|BODY|BR|COL|COLGROUP|DD|DT|FRAME|HEAD|HR|HTML|IMG|INPUT|ISINDEX|LI|LINK|META|OPTION|P|PARAM|TBODY|TD|TFOOT|TH|THEAD|TR|area|base|basefont|body|br|col|colgroup|dd|dt|frame|head|hr|html|img|input|isindex|li|link|meta|option|p|param|tbody|td|tfoot|th|thead|tr)[^<>]*/?>",
"");
//去掉成对的HTML标记
temp_result=temp_result.Replace(@"<([a-zA-Z]+)[^<>]*>(.*?)</\1>","$2");
//用正则表达式取出标记
Pattern = ("<([a-zA-Z]+)[^<>]*>");
m = Regex.Matches(temp_result,Pattern);
ArrayList endHTML = new ArrayList();
foreach(Match mt in m)
{
endHTML.Add(mt.Result("$1"));
}
//补全不成对的HTML标记
for (int i = endHTML.Count - 1; i >= 0; i--)
{
result.Append("</");
result.Append(endHTML[i]);
result.Append(">");
}
return result.ToString();
}
//望此方法对楼主有用