原始过滤器仍在源代码中将 & 转换为 &
Raw filter still converting & to & in the source
我正在尝试在 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 %}
编辑:意识到我应该说 "possessive" 而不是 "plural" :)
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>
过滤器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 }}
我正在尝试在 Twig 上使用原始过滤器,但它仍在将源中的 &
转换为 &
。
所以它输出 &rsquo;
而不是 ’
{% 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 %}
编辑:意识到我应该说 "possessive" 而不是 "plural" :)
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>
过滤器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 }}