【问题标题】:Is it possible to execute some tags within a textarea as leaving the rest as plaintext?是否可以在文本区域中执行某些标签,而将其余标签保留为纯文本?
【发布时间】:2011-02-19 05:25:47
【问题描述】:

我正在开发一个基于 php 的 Web 应用程序,其中有一个文本区域,用户可以在其中输入任何他/她想要的内容,然后将内容存储在数据库中后显示在另一个页面上。场景是用户可以输入 HTML 标签。但就功能限制而言,我希望允许用户执行一些标签,例如<a><div> 等,而将其余标签显示为纯文本。
我之前贴过这个问题:
Prevent HTML data from being posted into form textboxes
但它只回答了诸如strip_tags()htmlspecialchars() 之类的方式,它们要么剥离了html 内容,完全显示剩余的纯文本,要么将所有内容显示为纯文本,没有添加任何标签作为例外的选项,分别。请帮忙。干杯。

【问题讨论】:

    标签: php html css


    【解决方案1】:

    您可以查看HTML Purifier。这是一个专门为此设计的库。

    它似乎可以处理任何形式的 xss 攻击。另请参阅comparison 页面。

    【讨论】:

      【解决方案2】:

      正如上一篇文章所说,strip_tags() 是答案,如果您费心阅读strip_tags() 的手册页,您会看到您可以告诉它允许哪些标签,这正是您想要的。

      【讨论】:

      • 我阅读了手册页,但重点是它完全删除了未作为例外添加的标签。我希望其余部分或标签显示为纯文本。
      • 重点是我希望允许用户在他们愿意的情况下在页面上显示一些代码,就像我们在 stackoverflow 中所做的那样。你有更好的显示代码的想法吗?
      【解决方案3】:

      检查documentation 中的strip_tags,您会看到接受的第二个(可选)参数是一个允许的标签数组。

      【讨论】:

      • 剥离标签从内容中完全删除可选参数中未添加的标签。我希望未在可选参数中添加的标签显示为纯文本,即,我想要具有 Strip 标签和 htmlspecialchars 功能组合的东西。
      【解决方案4】:

      编辑:误解了。没关系 D:我认为需要更多的睡眠。看起来你应该只运行一个 htmlspecialchars 并使用正则表达式重新转换所需的标签

      获取PHP的翻译表,去掉不需要的,然后调用strtr();

      $table = get_html_translation_table(HTML_SPECIALCHARS);
      $table['allowed_tag'] = "";
      $table['another_allowed_tag'] = "";
      strtr($str, $table);
      

      我还没有测试,但它应该可以工作。

      【讨论】:

        猜你喜欢
        • 2019-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-15
        • 2019-11-05
        • 1970-01-01
        • 2013-11-23
        相关资源
        最近更新 更多