如果在頁面中,将文本編輯器内的文本内容直接送出給背景後提示“存在危險的 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 >