我正在尝试在Twig上使用原始过滤器,但仍在源中将&
转换为&
。
因此它输出的是’
而不是’
{% if entry.title|last == "s" %}
{% set pluralLocationName = entry.title ~ "’" %}
{% else %}
{% set pluralLocationName = entry.title ~ "’" ~ "s" %}
{% endif %}
{% if entry.title|last == "s" %}
{% set pluralLocationName = entry.title ~ ("&"|raw) ~ "rsquo;" %}
{% else %}
{% set pluralLocationName = entry.title ~ ("&"|raw) ~ "rsquo;" ~ "s" %}
{% endif %}
编辑:意识到我应该说“拥有”而不是“多个”:)
答案 0 :(得分:2)
Twig仅自动转义输出,因此您的代码可以按预期工作,并且在每次打印结果时都将其转义,因此可以
仅包装{% autoescape %}
中的输出:
{% if entry.title|last == "s" %}
{% set pluralLocationName = entry.title ~ "’" %}
{% else %}
{% set pluralLocationName = entry.title ~ "’" ~ "s" %}
{% endif %}
{% autoescape false %}
<div>
{{ pluralLocationName }}
</div>
{% endautoescape %}
输出|raw
值:
{% if entry.title|last == "s" %}
{% set pluralLocationName = entry.title ~ "’" %}
{% else %}
{% set pluralLocationName = entry.title ~ "’" ~ "s" %}
{% endif %}
<div>
{{ pluralLocationName|raw }}
</div>
答案 1 :(得分:2)
过滤器raw
用于输出内容。您不能将标记为安全的内容存储在变量中。这意味着您需要在输出中添加raw
,而不是输入
{% if entry.title|last == "s" %}
{% set pluralLocationName = entry.title ~ "’" %}
{% else %}
{% set pluralLocationName = entry.title ~ "’" ~ "s" %}
{% endif %}
{{ pluralLocationName | raw }}
直接打印变量而不是将其存储在变量中时,同样适用。在那里,您需要将完整的字符串用括号括起来才能完成这项工作。
原因是将首先执行过滤器,从而将&ruqou;
标记为安全,但是一旦连接该字符串,它将再次被标记为不安全内容。
{% if entry.title|last == "s" %}
{{ (entry.title ~ "’")|raw }}
{% else %}
{{ (entry.title ~ "’" ~ "s")|raw }}
{% endif %}
边注您可能想像这样使代码段更短
{% set pluralLocationName = entry.title ~ "’" ~ (entry.title|last != 's' ? 's') %}
{{ pluralLocationName | raw }}