【问题标题】:ng-bind-html removes content after < (less than sign)ng-bind-html 删除 < 之后的内容(小于号)
【发布时间】:2019-07-25 23:01:36
【问题描述】:

我正在使用角度 v1.5.6。我有一些用户输入了 html 数据以及存储在数据库中的特殊字符。为了说明,

var txt = "<span class='txt_bold'> content with <lessthan signs<span> <span>";

var txt1 = "<span class='txt_bold'> content with <4 lessthan >greaterthan signs <span>";

当我在 ng-bind-html 指令中添加以上两行时,我得到如下输出。

txt : content with 
txt1 : content with <4 lessthan >greaterthan signs

正如我们所见,txt

  1. ng-bind-html work partially than expected
  2. Insert HTML into view

任何提示将不胜感激。

【问题讨论】:

  • 如果你在
  • 如果您允许用户使用 HTML 标记来格式化用户输入,您可能必须在将特殊字符存储到数据库之前对其进行转义,以便 txt 变为 &lt;span class='txt_bold'&gt; content with &amp;lt;lessthan signs&lt;span&gt; &lt;span&gt;

标签: javascript angularjs escaping special-characters html-sanitizing


【解决方案1】:
<span class='txt_bold'> content with <lessthan signs<span> <span>

正如我们所见,txt 中

这是不正确的。该字符串实际上被解析为:

<span class="txt_bold">
  content with
  <lessthan signs<span>
    <span></span>
  </lessthan>
</span>

&lt;lessthan 未被删除;它被解析为&lt;lessthan&gt; 标签。它没有被删除;它被渲染为空。

要逃避解析,请使用html entities:

&lt;lessthan

更多信息请见MDN Web API Reference - innerHTML operational details

【讨论】:

  • 当我在保存时应用转义并放入 ng-bind 指令而不是 ng-bind-html 指令时,它将未转义的值视为字符串而不是 html。
猜你喜欢
  • 2013-10-25
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-06
  • 2014-07-16
相关资源
最近更新 更多