请教个在线编辑文章的问题.页面上编辑文章,如何检查里边的HTML是否完整?

fengyecsdn 2008-07-16 09:27:15
最近作的项目里,有个编辑器,但是由于使用者水平十分有限,经常是复制粘贴到编辑器里带有混合HTML代码的内容.
问题是里边经常出现些特殊的标记或者不完整的标记.
当我的页面显示的时候常被他们的HTML搞的乱七八糟.比如他们的代码里少个TABLE结尾或者类似的东西吧.
在编辑器里多少有点变形,但是却大面上还偏差不大,但是文章显示到我的页面里,页面结构越复杂,出来的结果就越匪夷所思!
想请教下该如何检查他们的文章里HTML的完整性?或者只检查部分特殊标记? 以及在页面上显示文章的时候有没有什么办法叫他们的代码无论出什么错误都别影响我页面本身的结构和效果?(IFRAME办法除外)
谢谢
...全文
137 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengyecsdn 2008-07-18
  • 打赏
  • 举报
回复
我是要在WINDOWS SERVICE里处理 不能用FCK啊.
suyiming 2008-07-16
  • 打赏
  • 举报
回复
FCKeditorV2 这个应该够楼主用
nopole 2008-07-16
  • 打赏
  • 举报
回复
http://blog.csdn.net/nopole/archive/2008/03/19/2197285.aspx

楼主参考一下

这是我前段时间搞的 里面有你需要的东西
fengyecsdn 2008-07-16
  • 打赏
  • 举报
回复
分数点错了,开了个加分贴
http://topic.csdn.net/u/20080716/09/2351b022-34b6-4327-9cd1-a87212836cac.html

两边一共80分,请能帮忙的朋友回答啊,不会亏了您.
luckyboy101 2008-07-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 suyiming 的回复:]
FCKeditorV2 这个应该够楼主用
[/Quote]
aaajedll 2008-07-16
  • 打赏
  • 举报
回复
學習
路人乙e 2008-07-16
  • 打赏
  • 举报
回复
将用户输入<和>替换成实体<和>
leon28 2008-07-16
  • 打赏
  • 举报
回复

/*
* 按字节长度截取字符串(支持截取带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();
}
//望此方法对楼主有用

61,827

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧