Freemarker中的java转义宏参数值
考虑下面的宏
<#macro subject text>
${_mail.setSubject(text)}
</#macro>
和示例用法:
<@mail.subject text="MyEmailSubject124" />
<@mail.subject text="${initiator!'<unknown>'}: Subject with interpolation" />
现在,我的应用程序应该能够编写特定的Freemarker模板文件,包括使用该宏的行。但是,“文本”参数值是通过用户界面从用户输入中检索的。因此,在构建模板文件内容时,我有如下代码
"<@mail.subject text=\"" + escape(userInput) + "\" />"
但是我应该如何转义参数值呢
我尝试了使用来自freemarker.template.utility
包的StringUtil.FTLStringLiteralEnc(subject, '"')
,但是对于插值示例来说,这不起作用,因为它产生了
<@mail.subject text="$\{initiator!'\lunknown\g'}: Subject with interpolation" />
插值没有完成。我没发现这里用的是哪种逃生方式
# 1 楼答案
从你的问题来看,你似乎打算允许用户输入任意的FreeMarker表达式,因为你打算允许
${expression}
。然后用户在userInput
中使用FTL语法,因此转义没有意义。如果用户有权输入任意表达式,只有他们知道该表达式的含义,从而知道在中从何处逃离。(如果希望阻止用户输入表达式,则转义是有意义的,这就是FTLStringLiteralEnc
所做的。)