是否可以使用java变量将HTML直接插入到速度模板中?

时间:2017-05-01 19:02:05

标签: java velocity

考虑以下java变量声明:

String s = "Please follow us on Facebook <a href=\"https://facebook.com/u/myuser\"> here</a>";

考虑以下Velocity模板:

<html>
    <body>
    ...
    <div>$!s</div>
    ...
    </body>
</html>

这会按预期工作吗?或者更确切地说,是否可以通过java变量将HTML直接插入DOM?

我假设没有 - 我猜想HTML字符会被转义。

我正在努力创建一些通用模板,以便尽可能多地重复使用,所以我可能最终会自己测试一下,但我想我是否可以自己保存一个有点时间,如果有人知道他们的头顶。另外,我还没有在velocity docs或stackoverflow中找到关于此的任何信息。

2 个答案:

答案 0 :(得分:3)

是的,这是可能的。

Velocity不会逃避HTML本身,因为它不仅仅是为了HTML。通常,它不知道你用它生成什么类型​​的文本。

Velocity包含一个可用于显式转义所需内容的转义工具:https://velocity.apache.org/tools/1.4/generic/EscapeTool.html

如果您要使用Velocity生成HTML,我建议您仅使用String变量并转义传递给它的所有变量以进行输出。如果您需要某些变量不进行转义,请使用白名单(即您在转义器中未转义的变量名称的明确列表)。

这种方法可以默认实现&#39;政策。

答案 1 :(得分:0)

有同样的问题。

我们发现您还可以在模板的开头添加指令#disable_html_escaping()