Spec-Zone.ru › Twig 2

escape

Фильтр 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-документах сложно, и выбор правильной стратегии экранирования зависит от многих факторов. Пожалуйста, ознакомьтесь с соответствующей документацией, например, с руководством по предотвращению XSS от OWASP, чтобы узнать больше об этой теме.

Примечание

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

Предупреждение

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

{% 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() на экземпляре расширения экранирователя. Первый аргумент — имя экранирователя (для использования в вызове escape), а второй должен быть допустимым вызываемым по PHP:

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

При вызове Twig, вызываемый получает экземпляр среды 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/2.x/filters/escape.html

Spec-Zone.ru

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