如何使文本框接受html标记

时间:2011-11-08 03:53:48

标签: asp.net html textbox validation html-encode

我的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标签?感谢。

3 个答案:

答案 0 :(得分:4)

只需禁用输入验证(仅适用于页面),并确保对页面中其他文本框的输入进行编码。默认情况下,输入验证不会启用,因为它不应该被禁用,而是因为您应该知道自己在做什么并明确地执行此操作。这样你就一定要注意并做自己的输入验证。

答案 1 :(得分:1)

如果你需要编码html标签并在浏览器上显示,请记住

 <%= Server.HTMLEncode("The paragraph tag: <P>") %>  

产生以下输出:

The paragraph tag: &lt;P&gt;

将由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,您有以下解决方案:

  • 关注@Stilgar并使用Anti-XSS进行编码。
  • 使用Textile或BBCode标记语言代替HTML。