Javascript Angular.js中的部分HTML字符串转义

Javascript Angular.js中的部分HTML字符串转义,javascript,angularjs,security,angular-translate,Javascript,Angularjs,Security,Angular Translate,我已经读过angular默认情况下转义所有内容的方法,因此我通过过滤器(因为$sce未在服务中工作)使用$sce.trustAsHtml()白名单数据,如下所示: <sup class="ng-binding" ng-bind-html="row|logEntry"></sup> 例如,我可以翻译有关userX更改文章的内容,但如果用户名包含alert('evilname') $translate本身是不相关的,它可以是任何HTML字符串,我想用常规JS替换其中的某些部

我已经读过angular默认情况下转义所有内容的方法,因此我通过过滤器(因为
$sce
未在服务中工作)使用
$sce.trustAsHtml()
白名单数据,如下所示:

<sup class="ng-binding" ng-bind-html="row|logEntry"></sup>
例如,我可以翻译有关userX更改文章的内容,但如果用户名包含
alert('evilname')

$translate
本身是不相关的,它可以是任何HTML字符串,我想用常规JS
替换其中的某些部分。replace()
将内容保留为“文本”

所以我的问题是-如何转义HTML的某些部分?我是否必须在视图内部将其分割成多个部分?还是我必须求助于海关逃跑(
)? 这类事情有没有更好的做法?

让我们从重构
日志条目开始,以分离插值图

var translationId = 'Log.' + msg.context.entity_type) + '.' + msg.context.action;
var interpolateParams = {
        'object_name': msg.context.object_name,
        'user': msg.context.user_name
};
var translated = $translate(translationId, interpolateParams);
return $sce.trustAsHtml(translated);
您希望从
插值图
中转义所有HTML,但将所有HTML保留在翻译模板中。使用此代码复制对象,迭代其值并替换为转义HTML

var safeParams = angular.copy(interpolateParams);    
angular.forEach(safeParams, function(value, key, obj) {     
  obj[key] = encodeEntities(value)
  // if you want safe/sanitized HTML, use this instead
  // obj[key] = $sanitize(value);
});
var translated = $translate(translationId, safeParams);
最后,angular的
encodeEntities
功能没有公开,因此我们不得不从

有关应用程序添加中的更多净化价值策略,请参阅文档

$translateProvider.useSanitizeValueStrategy('escapeParameters');
因此,您的代码如下所示:

myApp.config(function ($translateProvider) {

    //...whatever

  $translateProvider.useSanitizeValueStrategy('escapeParameters');

});
$translateProvider.useSanitizeValueStrategy('escapeParameters');
$translateProvider.useSanitizeValueStrategy('escapeParameters');
myApp.config(function ($translateProvider) {

    //...whatever

  $translateProvider.useSanitizeValueStrategy('escapeParameters');

});