Экранирование HTML не работает так же, если angular-translate используется как директива (а не как фильтр)

угловой перевод - версия: 2.8, угловая версия 1.3.5

Ключ перевода MyKey содержит <i>Text</i>

Дан фрагмент:

<p translate="MyKey"></p>
<p translate="{{'MyKey'}}"></p>
<p><translate>MyKey</translate></p>
<p>{{'MyKey' | translate}}</p>

Результат:

Text          --> italic, why is it not escaped?
Text          --> italic, why is it not escaped?
Text          --> italic, why is it not escaped?
<i>Text</i>   --> I expect it that way

Почему фильтр перевода экранирует, как и ожидалось, но как директива ничего не экранирует?

Я также возился с $translateProvider.useSanitizeValueStrategy('sanitize');, это не имеет никакого значения для приведенного выше примера.


person sl3dg3    schedule 06.04.2016    source источник


Ответы (1)


В приложениях AngularJS вывод фильтра всегда будет экранирован. Это делается автоматически и не контролируется самой функцией фильтра. Наоборот, директива имеет полный контроль над тем, какая и как информация будет добавляться/удаляться/и так далее.

// ensure angular-sanitize.js is present
$translateProvider.useSanitizeValueStrategy('sanitize');

Санитарная обработка никуда не делась! Вместо того, чтобы экранировать все, он проверяет допустимую (и безопасную) строку (html, javascript, css). Если он действителен, он будет использовать фактический ввод. В противном случае он будет отклонен.

Я сделал обзорную матрицу настроек директивы, фильтра и экранирования/дезинфекции в angular-translate. Это постоянная проблема с символами UTF-8, но я думаю, вы ее получите: http://plnkr.co/edit/8BHONOjhsxBxxO9oVYOK?p=preview

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

person knalli    schedule 24.04.2016