2011-08-19 59 views
1

我正在寻找一个textarea的白名单,该书名将用于书名。我想要允许的唯一字符是字母数字,空格,连字符,下划线,句点和<br>标记。理想情况下,任何其他特殊字符都应该转换为它们的特性。如果有帮助,该页面使用php,html,javascript和jquery。有人有主意吗??在textarea的html textarea白名单

例输入:

<textarea> 
I have this book called Sample- a Fake Book.  
</textarea> 
+0

你到目前为止尝试过什么?你跑哪个具体问题?什么是“标签”字符? – hakre

+0

我用@orip第一种方法使用htmlentities然后把
的带回来。为我工作得很好! – cbr0wn

回答

1

如果这与安全性有任何关系,即确保数据总是安全显示,那么这必须在服务器端完成。

除了<br>标签,只要HTML编码应该做你想要的。

也许最好的办法是使用htmlentities,然后把<br>的背:

$encoded_text = htmlentities($input_text); 

// replace the encoded <br>'s with the original <br>'s 
$final_text = str_replace(htmlentities("<br>"), "<br>", $encoded_text); 

的另一种方式,试图让这种行为并仍使用htmlentities是一个占位符代替<br>标签,运行通过htmlentities,然后将其替换回来。沿线的东西:

$br_placeholder = "XX_BR_PLACEHOLDER_XX"; 
$text_with_placeholders = str_replace("<br>", $br_placeholder, $input_text); 
$text_with_htmlentities = htmlentities($text_with_placeholders); 
$final_text = str_replace($br_placeholder, "<br>", $text_with_htmlentities); 
+0

谢谢!第一种将
标签带回来的方法效果很好! – cbr0wn

1

如果你希望允许非字母数字字符,但让他们转换成ヶ辆,那么白名单是不是你所需要的。您可以:

  • 使用JavaScript和正则表达式来提交
  • 让jQuery的使用$('<div/>').text(string).html()把戏做同样的事情
  • 将它们转换在服务器端在你的PHP代码
  • 之前更换<,>和&
0

在textarea上使用onkeyup处理程序来检测什么时候输入了内容。然后,您检索textarea的内容和检查“非法”字符:

<script type="text/javascript"> 
    function textFilter() { 
     this.value = this.value.replace(/[^a-zA-Z0-9 \-_\.]/, ''); 
    } 

</script> 

<textarea onkeyup="textFilter();"></textarea> 

不知道你是什么意思“标签”,所以这个功能将无法处理的“标签”。请注意,这只是删除非法字符,并不会将它们转换为字符实体。

+0

这将删除字符。它们应该被转换为html实体 –

+0

它也不会阻止人们通过自定义帖子提交恶意内容。 – jduncanator