Spec-Zone.ru › Twig 1

escape

Новый в версии 1.9.0: Стратегии css, url, и html_attr были добавлены в Twig 1.9.0.

Новый в версии 1.14.0: Возможность определения пользовательских экранизаторов была добавлена в Twig 1.14.0.

Фильтр escape экранирует строку, используя стратегии, зависящие от контекста.

По умолчанию используется стратегия экранирования HTML:

<p>
    {{ user.username|escape }}
</p>

Для удобства, фильтр e определён как псевдоним:

<p>
    {{ user.username|e }}
</p>

Фильтр escape также может использоваться в других контекстах, помимо HTML, благодаря необязательному аргументу, определяющему используемую стратегию экранирования:

{{ user.username|e }}
{# is equivalent to #}
{{ user.username|e('html') }}

И вот как экранировать переменные, включенные в код JavaScript:

{{ user.username|escape('js') }}
{{ user.username|e('js') }}

Фильтр escape поддерживает следующие стратегии экранирования для HTML-документов:

  • html: экранирует строку для контекста тела HTML.
  • js: экранирует строку для контекста JavaScript.
  • css: экранирует строку для контекста CSS. Экранирование CSS может применяться к любой строке, вставляемой в CSS, и экранирует все символы, кроме буквенно-цифровых.
  • url: экранирует строку для контекстов URI или параметра. Это не следует использовать для экранирования всего URI; только подкомпоненты, которые вставляются.
  • html_attr: экранирует строку для контекста атрибута HTML.

Обратите внимание, что контекстуальное экранирование в HTML-документах сложно, и выбор правильной стратегии экранирования зависит от множества факторов. Пожалуйста, ознакомьтесь со связанной документацией, например, с листом рекомендаций OWASP по предотвращению XSS, чтобы узнать больше об этой теме.

Примечание

Внутренне, escape использует встроенную PHP-функцию htmlspecialchars для стратегии экранирования HTML.

Внимание

При использовании автоматического экранирования, Twig старается не экранировать переменную дважды, когда стратегия автоматического экранирования совпадает со стратегией, применяемой фильтром escape; но это не работает, когда переменная используется в качестве стратегии экранирования:

{% set strategy = 'html' %}

{% autoescape 'html' %}
{{ var|escape('html') }}{# won't be double-escaped #}
{{ var|escape(strategy) }}{# will be double-escaped #}
{% endautoescape %}

При использовании переменной в качестве стратегии экранирования, следует отключить автоматическое экранирование:

{% set strategy = 'html' %}

{% autoescape 'html' %}
{{ var|escape(strategy)|raw }}{# won't be double-escaped #}
{% endautoescape %}

Пользовательские экранизаторы

Вы можете определить пользовательские экранизаторы, вызвав метод setEscaper() на экземпляре расширения core. Первый аргумент — имя экранизатора (которое будет использоваться в вызове escape), а второй — допустимый PHP callable:

$twig = new \Twig\Environment($loader);
$twig->getExtension('\Twig\Extension\CoreExtension')->setEscaper('csv', 'csv_escaper');

// before Twig 1.26
$twig->getExtension('core')->setEscaper('csv', 'csv_escaper');

При вызове Twig, callable получает экземпляр среды Twig, строку для экранирования и кодировку.

Примечание

Встроенные экранизаторы не могут быть переопределены, главным образом потому, что они должны рассматриваться как конечная реализация, а также для лучшей производительности.

Аргументы

  • strategy: Стратегия экранирования
  • charset: Кодировка строки
« default | filter »

© 2009–2018 by the Twig Team
Licensed under the three clause BSD license.
The Twig logo is © 2010–2020 Symfony
https://twig.symfony.com/doc/1.x/filters/escape.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API