我正在寻找一个用于书籍标题的文本区白名单。我想要允许的唯一字符是字母数字,空格,连字符,下划线,句点和<br>
标记。任何其他特殊字符都应该理想地转换为他们的htmlentities。如果有帮助,页面使用php,html,javascript和jquery。任何人都有任何想法??
textarea中的示例输入:
<textarea>
I have this book called Sample- a Fake Book.
</textarea>
答案 0 :(得分:1)
如果您想允许非字母数字字符,但将它们转换为htmlentities,那么白名单并不是您需要的。你可以:
$('<div/>').text(string).html()
技巧答案 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实体。