如何转义捕获分配的 Freemarker 输出?

问题描述 投票:0回答:2

我想转义变量的输出,该变量在示例 2 中使用了

<#assign>
的捕获语法。

示例1:

<#assign test1='{"json": "more"}' />
<div data-test1="${test1}"></div>

输出(转义):

<div data-test1="{&quot;json&quot;: &quot;more&quot;}"></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>

这正是docs描述此功能的方式。还有用于转义的docs

我需要使用第二个示例,因为

test2
生成起来更复杂。 有没有办法强制转义或将非标记输出转换为标记?我尝试了
?esc
<#outputformat>
<#autoesc>
,重新分配给另一个变量。 没有任何效果。

java html frontend escaping freemarker
2个回答
0
投票

找到解决方案。通过内置

?markup_string
将标记输出转换为字符串。然后就会自动转义了。

<div data-test2="${test2?markup_string}"></div>

输出:

<div data-test2="{ &quot;json&quot;: &quot;because it is more complex with list, if else etc.&quot; }"></div>

0
投票

您需要将捕获生成的 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>
© www.soinside.com 2019 - 2024. All rights reserved.