escape
¶
这个 escape
过滤器使用依赖于上下文的策略来转义字符串。
默认情况下,它使用HTML转义策略:
1 2 3 | <p>
{{ user.username|escape }}
</p>
|
为了方便起见, e
过滤器定义为别名:
1 2 3 | <p>
{{ user.username|e }}
</p>
|
这个 escape
filter还可以在HTML以外的其他上下文中使用,这归功于一个可选参数,它定义了要使用的转义策略:
1 2 3 | {{ user.username|e }}
{# is equivalent to #}
{{ user.username|e('html') }}
|
下面是如何转义JavaScript代码中包含的变量:
1 2 | {{ 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文档中进行上下文转义是很困难的,选择正确的转义策略取决于很多因素。请阅读相关文档 the OWASP prevention cheat sheet 了解更多有关此主题的信息。
注解
内部, escape
使用PHP本机 htmlspecialchars 函数用于HTML转义策略。
警告
使用自动转义时,当自动转义策略与转义筛选器应用的策略相同时,Twig会尝试不对变量进行双重转义;但当使用变量作为转义策略时,这不起作用:
1 2 3 4 5 6 | {% set strategy = 'html' %}
{% autoescape 'html' %}
{{ var|escape('html') }} {# won't be double-escaped #}
{{ var|escape(strategy) }} {# will be double-escaped #}
{% endautoescape %}
|
使用变量作为转义策略时,应禁用自动转义:
1 2 3 4 5 | {% 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调用时,callable接收Twig环境实例、要转义的字符串和字符集。
注解
内置转义器不能被重写,主要是因为它们应该被视为最终实现,同时也是为了获得更好的性能。
争论¶
strategy
:逃跑策略charset
:字符串字符集