我的aspx页面中有一个文本框。用户希望能够在文本框中输入html标签。到目前为止我知道通过验证错误的唯一方法是将ValidateRequest设置为false。我尝试了其他几种方法: (1)在像这样的javascript中使用Server.HtmlEncode
<%@ Import Namespace="System.Web" %>
var tb = document.getElementById("<%=synopsisTextBox.ClientID%>");
var value =Server.HtmlEncode(tb.value);
但是我遇到了编译器错误。谁能告诉我我做错了什么?
(2)创建我自己的编码功能
function escapeHTML (str)
{
var div = document.createElement('div');
var text = document.createTextNode(str);
div.appendChild(text);
return div.innerHTML;
}
某种程度上它不能很好地工作。当我点击某个导致同一页面回发的按钮时,它会卡住。
有人能告诉我是否有更好的方法让你的文本框接受html标签?感谢。
答案 0 :(得分:4)
只需禁用输入验证(仅适用于页面),并确保对页面中其他文本框的输入进行编码。默认情况下,输入验证不会启用,因为它不应该被禁用,而是因为您应该知道自己在做什么并明确地执行此操作。这样你就一定要注意并做自己的输入验证。
答案 1 :(得分:1)
如果你需要编码html标签并在浏览器上显示,请记住
<%= Server.HTMLEncode("The paragraph tag: <P>") %>
产生以下输出:
The paragraph tag: <P>
将由Web浏览器显示为:
The paragraph tag: <P>
使用Server.HTMLEncode进行的试用无效,因为当数据在服务器上并需要在发送到浏览之前进行编码时,它才有效。在您的示例中,数据在浏览器上,请求在验证时被阻止,然后在服务器上接收。
如果您希望用户编辑TextBox并输入html标记,您可以通过
禁用此功能 <%@ Page validateRequest="false" ...>
或整个应用程序的web.config:
<system.web>
<page validateRequest="false" />
</system.web>
请注意,此ValidateRequest属性不存在 原因。当您更改其默认值时,将出现不安全的输入 公认。因此,您需要验证每个用户的输入 避免跨站点脚本攻击,如插入恶意攻击 JavaScript,ActiveX,Flash或HTML
另一个智能解决方案是通过用户编写的javascript文本替换,以确保安全。
< tag>
代替<tag>
被认为是安全的!
function validateTxt() {
$("textarea, input[type='text']").change(function () {
html = $(this).val(); //get the value
//.replace("a" , "b") works only on first occurrence of "a"
html = html.replace(/< /g, "<"); //before: if there's space after < remove
html = html.replace(/</g, "< "); // add space after <
$(this).val(html); //set new value
});
}
$(document).ready(function () {
validateTxt();
});
答案 2 :(得分:0)
IMO,您有以下解决方案: