Spec-Zone.ru › Twig 3

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

Примечание

Внутренне, 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/3.x/filters/escape.html

Spec-Zone.ru

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