角度翻译消毒与UTF字符失败

时间:2015-06-23 12:12:47

标签: javascript angularjs sanitization angular-translate

在Angular 1.3.x上使用最新版本的angular-translate。使用$sanitize似乎直接使用过滤器或服务时会出现问题,但在使用该指令时它会起作用。

建议?

以下是一个例子:



var myApp = angular.module('myApp', [ 'pascalprecht.translate', 'ngSanitize' ]);

myApp.config(function($translateProvider) {
    $translateProvider.useSanitizeValueStrategy("sanitize");
    $translateProvider.preferredLanguage('en');
    $translateProvider.translations('en', {
        UTF: 'öéü',
    });
});

myApp.controller("myCtrl", function($scope, $translate) {
    $translate("UTF").then(function(trans) {
        $scope.UTFCTRL = trans;
    });
});

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.16/angular-sanitize.min.js"></script>
<script src="http://rawgit.com/PascalPrecht/bower-angular-translate/master/angular-translate.min.js"></script>

<div ng-app="myApp" ng-controller="myCtrl">
    <div>
        Wrong: <h1>{{ 'UTF' | translate }}</h1>
    </div>
    
    <div>
        Ok: <h1 translate="UTF"></h1>
    </div>
    
    <div>
        Wrong: <h1>{{ UTFCTRL }}</h1>
    </div>
</div>
&#13;
&#13;
&#13;

关于jsfiddle:http://jsfiddle.net/gnvpo6aa/

2 个答案:

答案 0 :(得分:36)

目前,您有两种选择:

  1. 使用策略sanitizeParameters,它只会清理动态参数,但不会清理实际的转换(模板)。如果你控制了翻译(但不是动态值),这将有效。
  2. 使用不使用清理但逃避的策略escape(或escapeParameters)。
  3. 免责声明:我是共同维护角度翻译。

    编辑(2016年1月12日):我创建了this matrix overview of all variants

答案 1 :(得分:0)

gitHub issue

中所述

使用sce解决了该问题

$translateProvider.useSanitizeValueStrategy("sce");