有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    从你的问题来看,你似乎打算允许用户输入任意的FreeMarker表达式,因为你打算允许${expression}。然后用户在userInput中使用FTL语法,因此转义没有意义。如果用户有权输入任意表达式,只有他们知道该表达式的含义,从而知道在中从何处逃离。(如果希望阻止用户输入表达式,则转义是有意义的,这就是FTLStringLiteralEnc所做的。)