【问题标题】:Allow HTML to be entered in text area允许在文本区域输入 HTML
【发布时间】:2014-03-16 14:22:19
【问题描述】:

所以我不知道我是否在 Google 或 Stackoverflow 上寻找错误的东西,但我想实现这一点-

表单中有一个文本区域,我希望用户能够输入 HTML 标签。

所以用户会在文本区域输入这个:

<html>
<p>Hello World</p>
</html>

然后通过 AJAX 和 JavaScript 将其提交到数据库,但似乎摆脱了标签。

我想要的是在返回数据时保留标签,但实际上不会影响文本区域中的其他数据。例如,如果我要回显文本区域的内容,它会回显:

<html>
<p>Hello World</p>
</html>

作为纯文本。

好的,我已经深入使用 htmlspecialchars,它可以满足我的需求,因为它将标签显示为纯文本。但是我希望一些标签被执行,例如粗体标签。我将如何结合 htmlspecialchars 和 striptags 以允许标签显示为纯文本,但也允许执行 striptags 中指定的标签。

【问题讨论】:

  • 您正在使用的某些软件正在主动删除该标记; &lt;textarea&gt; 值中的 HTML 标记没有什么特别之处。浏览器不会自动删除它,但 JavaScript 客户端或服务器上的一些善意但错误的代码会自动删除。
  • 尝试使用 console.log('textareadata') 查看正在提交给服务器的内容。如果它是正确的 html,那么它就是在服务器端剥离标签的东西。如果不是,那是客户端的问题。
  • 我怀疑有些东西正在删除标签。您可能只是在 html 上下文中查看它,并且标记已呈现。在浏览器中输入view source

标签: javascript php jquery html tags


【解决方案1】:

您无需(或可以)做任何事情来允许用户输入 HTML 标记。原因是输入无论如何都被读取为纯文本,因此任何&amp;lt; 字符都按原样获取。所以如果用户输入&lt;a&gt;,这三个字符就会被插入到表单数据中。

然后,您对数据的处理方式,无论是服务器端还是其他方式,可能会也可能不会处理 HTML 标记。这完全取决于您的代码。如果您只是在生成的 HTML 页面上回显所有内容,那么 HTML 标记将具有通常的效果。如果您希望将其呈现为文本或可见标签,则只需将任何&amp;amp; 编码为&amp;amp; 并将任何&amp;lt; 编码为&amp;lt;

【讨论】:

  • 我找到了 htmlspecialchars 的根并更新了我的问题
  • 这是一个不同的问题。您应该接受其中一个正确答案并发布一个新问题,并提供足够的详细信息(您想要的规范、仅用相关标签标记,并显示您到目前为止所做的事情)。
【解决方案2】:

您无需执行任何操作,只要您不过滤用户提交的文本,它就会自动执行。

【讨论】:

    【解决方案3】:

    注意如果您想将输入的 HTML 回显给用户,请注意输入的 HTML 中潜在的恶意代码。此安全问题称为跨站点脚本(或 XSS)。

    换句话说:永远不要相信输入的代码

    【讨论】:

    • 当您在网站中嵌入 iframe 但 iframe src 指向另一个域时,XSS 就会发挥作用。
    • 你应该永远允许代码被注入你的页面;无论您的页面上是否有 iframe。
    猜你喜欢
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多