如果在页面中,将文本编辑器内的文本内容直接提交给后台后提示“存在危险的 Request.QueryString 值“,如下图所示
错误发生的原因
那是因为文本编辑器自动设置了文本的格式,即添加了各种HTML标签,所以我们在使用里面的内容时,需要在前台用JS方法将HTML标签进行编码,将编码后的文本内容传递给后台,在后台用C#的方法将它解码成HTML标签后存到数据库中。
编码后的内容
通过JS对HTML标签编码和解码
var HtmlUtil = {
/*1.用浏览器内部转换器实现html转码*/
htmlEncode:function (html){
//1.首先动态创建一个容器标签元素,如DIV
var temp = document.createElement ("div");
//2.然后将要转换的字符串设置为这个元素的innerText(ie支持)或者textContent(火狐,google支持)
(temp.textContent != undefined ) ? (temp.textContent = html) : (temp.innerText = html);
//3.最后返回这个元素的innerHTML,即得到经过HTML编码转换的字符串了
var output = temp.innerHTML;
temp = null;
return output;
},
/*2.用浏览器内部转换器实现html解码*/
htmlDecode:function (text){
//1.首先动态创建一个容器标签元素,如DIV
var temp = document.createElement("div");
//2.然后将要转换的字符串设置为这个元素的innerHTML(ie,火狐,google都支持)
temp.innerHTML = text;
//3.最后返回这个元素的innerText(ie支持)或者textContent(火狐,google支持),即得到经过HTML解码的字符串了。
var output = temp.innerText || temp.textContent;
temp = null;
return output;
}
};
首先定义两个方法,然后可通过HtmlUtil.htmlEncode()和
HtmlUtil.htmlDecode()`方法对编辑器内的内容进行编码和解码
.NET编码解码
System.Web.HttpUtility.HtmlEncode() //对HTML标签编码
System.Web.HttpUtility.HtmlDecode() //对HTML标签解码
如果采用.Net MVC,可在相应的Action上添加[ValidateInput(false)]
特性
但是如果你使用的是MVC 3.0甚至更低版本,那么你会发现做了以上的设置后还是无效。这是因为你还需要在web.config中做以下设置:
<system.web >
<httpRuntime requestValidationMode="2.0" / >
</system.web >