在Angular JS中解码HTML实体

26

我如何在AngularJS中解码文本中的HTML实体。

我有这个字符串

""12.10 On-Going Submission of ""Made Up"" Samples.""

我需要一种使用 Angular JS 解码这段文本的方法。我在这里找到了一种使用 JavaScript 进行解码的方法 here,但我确定那对于 Angular 不起作用。需要在 UI 上获取原始字符串,它应该是这样的

""12.10 On-Going Submission of ""Made Up"" Samples.""
3个回答

43
你可以使用ng-bind-html指令以HTML内容的形式显示它,所有的HTML实体都会被解码。只需确保在应用中包含ngSanitize依赖项即可。

演示

JAVASCRIPT

angular.module('app', ['ngSanitize'])

  .controller('Ctrl', function($scope) {
    $scope.html = '"12.10 On-Going Submission of ""Made Up"" Samples."';
  });

HTML

  <body ng-controller="Ctrl">
    <div ng-bind-html="html"></div>
  </body>

19
如果您不想将它呈现为HTML,您该怎么处理它? - Narek Mamikonyan

23
如果您不想使用ngSanitize,可以按照以下方式操作:
在您的控制器中:
$scope.html = '&quot;12.10 On-Going Submission of &quot;&quot;Made Up&quot;&quot; Samples.&quot;'
$scope.renderHTML = function(html_code)
        {
            var decoded = angular.element('<textarea />').html(html_code).text();
            return $sce.trustAsHtml(decoded);
        };

在模板中:

<div ng-bind-html="renderHTML(html)"></div>

请确保在您的控制器中注入 $sce


这个可以工作,但是我在控制台中得到了这个错误:angular.min.js:123 TypeError: angular.element(...).html(...).text 不是一个函数 at b.$scope.renderHTML (app.js:24) at fn (eval at compile (angular.min.js:239), <anonymous>:4:284) at angular.min.js:129 at m.$digest (angular.min.js:146) at m.$apply (angular.min.js:149) at angular.min.js:21 at Object.invoke (angular.min.js:44) at c (angular.min.js:21) at Sc (angular.min.js:22) at ue (angular.min.js:20) - Flash

1

我有类似的问题,但不需要在用户界面上使用结果值。这个问题是通过来自Angular ngSanitize模块的代码解决的:

var hiddenPre=document.createElement("pre");
/**
* decodes all entities into regular string
* @param value
* @returns {string} A string with decoded entities.
*/
function decodeEntities(value) {
  if (!value) { return ''; }
    
  hiddenPre.innerHTML = value.replace(/</g,"&lt;");
  // innerText depends on styling as it doesn't display hidden elements.
  // Therefore, it's better to use textContent not to cause unnecessary reflows.
  return hiddenPre.textContent;
}


var encoded = '&lt;p&gt;name&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:xx-small;"&gt;ajde&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;da&lt;/em&gt;&lt;/p&gt;';
var decoded = decodeEntities(encoded);

document.getElementById("encoded").innerText=encoded;
document.getElementById("decoded").innerText=decoded;
#encoded {
  color: green;
}

#decoded {
  color: red;
}
Encoded: <br/>
<div id="encoded">
</div>

<br/>
<br/>

Decoded: <br/>
<div id="decoded">
</div>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接