html textarea的白名单

时间:2011-08-19 14:14:27

标签: php javascript jquery html textarea

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

textarea中的示例输入:

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

3 个答案:

答案 0 :(得分:1)

如果您想允许非字母数字字符,但将它们转换为htmlentities,那么白名单并不是您需要的。你可以:

  • 使用javascript和正则表达式替换&lt;,&gt;和&amp;在提交之前
  • 让jQuery使用$('<div/>').text(string).html()技巧
  • 做同样的事情
  • 在PHP代码中在服务器端转换它们

答案 1 :(得分: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);

答案 2 :(得分:0)

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

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

</script>

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

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