ng-bind-html-unsafe 不在 angularjs 中解析 html

Posted

技术标签:

【中文标题】ng-bind-html-unsafe 不在 angularjs 中解析 html【英文标题】:ng-bind-html-unsafe not parsing html in angularjs 【发布时间】:2013-06-18 03:50:17 【问题描述】:

我在 Angular 不解析 JSON 中提供的 html 时遇到了一些奇怪的问题。 我正在使用 ng-bind-html-unsafe 指令,该指令从 JSON 中获取字符串并将其输出到页面上,但浏览器没有解析 html。

我正在使用 angularjs V1.1.5,但也尝试过旧版本。

我的绑定标签如下所示:

<div class="announcement-wrapper" ng-repeat="announcement in announcements" id="announcement.announcementId">
  <p ng-bind-html-unsafe="announcement.content"></p>
</div>

提供绑定的 JSON 是:


"userId": "s123456",
"responseCode": "OK",
"responseMessage": "",
"timeStamp": 1371778685560,
"announcements": [
    
        "announcementId": 1518,
        "title": "Daves second announcement",
        "content": "&lt;p&gt;Announcement for Chad&lt;/p&gt;",
        "releaseDate": "13 June 2013",
        "important": false,
        "read": true
    ,
    
        "announcementId": 1511,
        "title": "Onshore HE and TAFE Announcement",
        "content": "&lt;p&gt;This announcement is only for Onshore HE and TAFE persons onshore.&lt;/p&gt;&lt;p&gt;High Priority.&lt;/p&gt;",
        "releaseDate": "04 June 2013",
        "important": false,
        "read": true
    
  ]

发生的情况是编码字符正在生成到页面上,只是浏览器没有将它们解析为实际的段落标签输出。例如。第二个公告正在页面上输出为

<p>This announcement is only for Onshore HE and TAFE persons onshore.</p><p>High Priority.</p>

我也尝试过使用 ng-bind-html 指令,并设置了 sanitize 依赖项,但两者都无法使用。毫无疑问,它很小,但我只需要一双新鲜的眼睛来看看......

提前致谢!

【问题讨论】:

快速注意 ng-bind-html-unsafe 不包含在 1.2 版中 【参考方案1】:

那是因为您使用&amp;lt;&amp;gt; 来表示括号的打开和关闭。

它们实际上将用作小于和大于符号而不是开始和结束标记。

您需要将announcements.content替换为小于和大于符号如下:

...
"content": "<p>Announcement for Chad</p>",
...

编辑:请参阅this 可能的所有 HTML 代码列表。您正在为“”使用 HTML 代码,因此您无需打开和关闭标签,而是获得该字符。

【讨论】:

谢谢。对字符进行编码的原因是为了防止 JSON 与 " 字符中断,但我们应该能够将这些字符转义,然后一切都会正常工作。 谢谢。这听起来很奇怪,但我有点知道这是问题所在,我只是无法让它在我的脑海中合乎逻辑。阅读完这篇文章后,我意识到我需要在使用 ng-bind-html 之前进行一些字符串替换。

以上是关于ng-bind-html-unsafe 不在 angularjs 中解析 html的主要内容,如果未能解决你的问题,请参考以下文章

您如何使用 $sce.trustAsHtml(string) 在 Angular 1.2+ 中复制 ng-bind-html-unsafe

习题:逼死强迫症(矩阵快速幂)

CodeForces 55D

[bzoj5462]新家

Codeforces Round #231 (Div. 2) E.Lightbulb for Minister

颤振医生致命,未知修订或路径不在工作树错误中