转义 HTML 有两个不同的问题。第一个问题是需要对实体进行编码,第二个问题是需要信任结果,以便将数据用作 html 绑定。将以下代码添加到您的控制器中,可以使用 $sce 服务为这两个问题提供解决方案。
CoffeeScript 解决方案:
MyApp.controller('MyController', ['$scope','$sce',($scope,$sce) ->
###
...
###
$scope.html5Entities = (value) ->
value.replace(/[\u00A0-\u9999<>\&\'\"]/gim, (i) ->
'&#' + i.charCodeAt(0) + ';'
)
$scope.trustAsHtml = (value) ->
$sce.trustAsHtml(value)
###
...
###
])
Javascript解决方案:
MyApp.controller('MyController', ['$scope','$sce', function($scope,$sce) {
/* ... */
$scope.html5Entities = function(value) {
return value.replace(/[\u00A0-\u9999<>\&\'\"]/gim, function(i) {
return '&#' + i.charCodeAt(0) + ';'
})
};
$scope.trustAsHtml = function(value) {
return $sce.trustAsHtml(value);
};
/* ... */
}]);
第一个函数html5Entities执行实际的实体编码,而第二个函数trustAsHtml将字符串标记为在 Angular 中用于 HTML 绑定是安全的。这两个版本都要求您的控制器中包含 $sce 服务。
示例用法:
<div ng-bind-html="trustAsHtml((html5Entities(product.title) | highlight: $select.search))"></div>
查看相关问题: