【问题标题】:whitelist for html textareahtml textarea的白名单
【发布时间】:2011-08-19 14:14:26
【问题描述】:

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

textarea 中的示例输入:

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

【问题讨论】:

  • 到目前为止你尝试过什么?你遇到了哪个具体问题?什么是“标签”字符?
  • 我使用@orip 第一种方法来使用 htmlentities 然后带回
    的。对我来说效果很好!

标签: php javascript jquery html textarea


【解决方案1】:

如果这与安全有关,即确保数据始终可以安全显示,则必须在服务器端完成。

除了&lt;br&gt; 标记之外,只有 HTML 编码可以满足您的需求。

可能最好的方法是使用htmlentities,然后将&lt;br&gt; 带回来:

$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 的另一种方法是将&lt;br&gt; 标记替换为占位符,遍历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】:

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 这会删除字符。它们应该被转换为 html 实体
    • 它也不会阻止人们通过自定义帖子提交恶意内容。
    猜你喜欢
    • 2011-09-20
    • 2011-11-12
    • 2021-10-30
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多