网站中如何过滤html标记!——求集各种方案!

anantnt203120 2005-11-30 09:29:46
用户输入中如果含有html标记可能造成网站页面的瘫痪,现在很多网站是采用htmlEncode()保存到数据库,取出时再htmlDecode(),但是依靠xml传递消息的页面就不适用,<>同样是xml关键字。
请问比较权威的网站是怎么做的,目前我只能限制用户输入,将所有<>都replace掉,但是不能满足用户需要。
...全文
506 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
bingbingcha 2005-12-02
  • 打赏
  • 举报
回复
对网页布局有影响的只有仅限的几个而已..并不多..可以简单的过滤出来,比如:body,head,html,css,style等等这些是影响比较大的
cnjack 2005-12-02
  • 打赏
  • 举报
回复
学习。。。
wadia 2005-12-01
  • 打赏
  • 举报
回复
HttpUtility.HtmlEncode



Server.HtmlEncode
rhz613 2005-12-01
  • 打赏
  • 举报
回复
UP
lnwuyaowei 2005-12-01
  • 打赏
  • 举报
回复
up
jerrycool 2005-12-01
  • 打赏
  • 举报
回复
呵呵...大家多多交流,技术才能进步.
jerrycool 2005-11-30
  • 打赏
  • 举报
回复
我的做法是把<>换成全角的入库
显示的时候,再还原.
caicaibao 2005-11-30
  • 打赏
  • 举报
回复
(e.Item.Cells[iColumns].Text.Replace("\"", """).Replace("<", "<<"))
XML中只有<是有问题的,只需改他,其它的无所谓,
var sValue = sReturnValue.replace(/&/g, "&").replace(/<</g, "<");
在接受的地方把"<<"转换成"<"就行了
不知道我的方法能帮到你吗?
jxufewbt 2005-11-30
  • 打赏
  • 举报
回复
用下面的方法就可以了:

///提取HTML代码中文字的C#函数
/// <summary>
/// 去除HTML标记
/// </summary>
/// <param name="strHtml">包括HTML的源码 </param>
/// <returns>已经去除后的文字</returns>
using System;
using System.Text.RegularExpressions;
public class StripHTMLTest{
public static void Main(){
string s=StripHTML("<HTML><HEAD><TITLE>中国石龙信息平台</TITLE></HEAD><BODY>faddfs龙信息平台</BODY></HTML>");
Console.WriteLine(s);
}

public static string StripHTML(string strHtml){
string [] aryReg ={
@"<script[^>]*?>.*?</script>",

@"<(\/\s*)?!?((\w+:)?\w+)(\w+(\s*=?\s*(([""'])(\\[""'tbnr]|[^\7])*?\7|\w+)|.{0})|\s)*?(\/\s*)?>",
@"([\r\n])[\s]+",
@"&(quot|#34);",
@"&(amp|#38);",
@"&(lt|#60);",
@"&(gt|#62);",
@"&(nbsp|#160);",
@"&(iexcl|#161);",
@"&(cent|#162);",
@"&(pound|#163);",
@"&(copy|#169);",
@"&#(\d+);",
@"-->",
@"<!--.*\n"
};

string [] aryRep = {
"",
"",
"",
"\"",
"&",
"<",
">",
" ",
"\xa1",//chr(161),
"\xa2",//chr(162),
"\xa3",//chr(163),
"\xa9",//chr(169),
"",
"\r\n",
""
};

string newReg =aryReg[0];
string strOutput=strHtml;
for(int i = 0;i<aryReg.Length;i++){
Regex regex = new Regex(aryReg[i],RegexOptions.IgnoreCase);
strOutput = regex.Replace(strOutput,aryRep[i]);
}
strOutput.Replace("<","");
strOutput.Replace(">","");
strOutput.Replace("\r\n","");
return strOutput;
}
}
anantnt203120 2005-11-30
  • 打赏
  • 举报
回复
由于其他页面通过webservice传递xmlstring,没有用xmldom
用正则替换掉,就不能满足用户需要,我想问除了encode或转义符replace还有什么好的权威的方法。
wangjuping 2005-11-30
  • 打赏
  • 举报
回复
我也想这个问题好长时间哦

收藏了哈
alanzhou 2005-11-30
  • 打赏
  • 举报
回复
转义符:< > &  
dicman 2005-11-30
  • 打赏
  • 举报
回复
" "
& &
< <
> >
luckyprg 2005-11-30
  • 打赏
  • 举报
回复
用UBB,如果你只是想过滤掉所有HTML标记,那么用正则替换掉。
alanzhou 2005-11-30
  • 打赏
  • 举报
回复
用DOM操作xml应该没问题啊
anantnt203120 2005-11-30
  • 打赏
  • 举报
回复
我的问题是,用户就希望输入这些特殊字符,我用什么方法进行替换。
chaobeyond 2005-11-30
  • 打赏
  • 举报
回复
最有效方法就是在sqlcommand中用参数,或用存储过程。
如:updata table set NAME=@NAME where ID=@ID
另外能导致页面出错的特殊字符就是那几个,只要扑捉到进行replace或者remove就可以,大体思路如下:
public static bool FormatText(string inputString)
{
bool flag=false;
string backString=returnVal.ToString();
//檢測輸入字符串是否含有'<,>,"'等字元
if (backString.IndexOf("<")!=-1 || backString.IndexOf(">")!=-1||backString.IndexOf("'")!=-1)
{

flag =false;
}
else
{
flag=true;
}

return flag;
}
inshua 2005-11-30
  • 打赏
  • 举报
回复
html 标记很有限。
翻开手册把它们列举完就安全了。
jerrycool 2005-11-30
  • 打赏
  • 举报
回复
为了安全着想,在服务器端转换我认为是必须的!
在调用显示的时候,再在客户端转换回来,一定要用JS的正则来匹配,不然只会替换找到的第一项.
至于正则怎么写,偶就不晓得了...偶正则也不强.遇到问题,都是请教的CSDN里的朋友们.
这是我的做法,把全角的< > ' "换回来.
//JS中replace只会替换第一个匹配的字符,加了/g可以替换掉全部匹配的字符(g为全局标志)。
function Converter(txt){
var reg_l = /</g;
var reg_r = />/g;
var reg_o = /“/g;
var reg_b = /‘/g;
txt = txt.replace(reg_l,"<").replace(reg_r,">").replace(reg_o,"\"").replace(reg_b,"'");
document.write(txt);
}
qwerttyy 2005-11-30
  • 打赏
  • 举报
回复
谢谢楼上的.

不过,这是在服务器端转换,有没有好的客户端转换的JS代码共享一下?
加载更多回复(5)

62,041

社区成员

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

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

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

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