考虑以下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中找到关于此的任何信息。
答案 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()
。