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: Кодировка строки
© 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