Фильтр escape

 

 

Фильтр escape экранирует строку для вывода. Он поддерживает различные настройки в зависимости от контекста шаблона.

 

По умолчанию экранируется HTML:

 

{{ user.username|escape }}

 

 

Для удобства работы с фильтром у него есть псевдоним:

 

{{ user.username|e }}

 

 

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

 

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

 

 

А таким образом экранируется JavaScript:

 

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

 

 

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

  • HTML: экранирует строку для контекста HTML. 
  • JS: экранирует строку для контекста JavaScript. 
  • CSS: экранирует строку для контекста CSS. CSS экранирование может быть применено к любой строке вставки в CSS и экранирует все, кроме буквенно-цифровых символов. 
  • URL: экранирует строку для URI.
  • html_attr: экранирует строку для контекста атрибута HTML.

 

Внутренне, 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() для экземпляра класса ядра. Первым аргументом является имя метода (для использования в вызове фильтра), а второй имя вызываемой функции:

 

$twig = new Twig_Environment($loader);
$twig->getExtension('core')->setEscaper('csv', 'csv_escaper'));

подписаться на рассылку

Я согласен на обработку моих данных

© Компания “Edgestile” 2004-2018 г.

Политика конфинденциальности