我想转义变量的输出,该变量在示例 2 中使用了
<#assign>
的捕获语法。
示例1:
<#assign test1='{"json": "more"}' />
<div data-test1="${test1}"></div>
输出(转义):
<div data-test1="{"json": "more"}"></div>
示例2:
<#assign test2><@compress single_line=true>
{
"json": "because it is more complex with list, if else etc."
}
</@compress></#assign>
<div data-test2="${test2}"></div>
输出(未转义):
<div data-test2="{ "json": "because it is more complex with list, if else etc." }"></div>
我需要使用第二个示例,因为
test2
生成起来更复杂。
有没有办法强制转义或将非标记输出转换为标记?我尝试了?esc
,<#outputformat>
<#autoesc>
,重新分配给另一个变量。
没有任何效果。
找到解决方案。通过内置
?markup_string
将标记输出转换为字符串。然后就会自动转义了。
<div data-test2="${test2?markup_string}"></div>
输出:
<div data-test2="{ "json": "because it is more complex with list, if else etc." }"></div>
您需要将捕获生成的 JSON 的部分放入
<#outputformat "JSON">...</#outputformat>
中。 (plainText
,或任何非标记输出格式也可以很好地工作,只要不抑制标记内的转义即可。)
<#outputformat "JSON">
<#assign test2><@compress single_line=true>
{
"json": "because it is more complex with list, if else etc."
}
</@compress></#assign>
</#outputformat>
<div data-test2="${test2}"></div>