Angular -трансляционная санитация не работает с символами UTF

Вкл Angular 1.3.x с последней версией angular -транслята. Используя $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>

Ответы

Ответ 1

На данный момент у вас есть два варианта:

  • Используйте стратегию sanitizeParameters, которая будет только дезинфицировать динамические параметры, но не фактический перевод (шаблон). Если у вас есть перевод под контролем (но не динамические значения), это будет работать.
  • Используйте стратегию escape (или escapeParameters), которая не использует дезинфекцию, а избегает.

Отказ от ответственности: я поддерживаю angular -translate.

Изменить (12.01.2016): Я создал этот матричный обзор всех вариантов.