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

Is it possible to insert HTML directly into the velocity template with a java variable?

考虑以下 java 变量声明:

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

并考虑以下速度模板:

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

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

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

我正在努力创建一些通用模板以尽可能多地重复使用,所以我可能最终会自己测试它,但我想我会问问我是否可以为自己节省一些时间任何人都知道。此外,我已经在 Velocity 文档或 Whosebug 中找不到关于此的任何信息。

是的,有可能。

Velocity 不会逃脱 HTML 本身,因为它不仅仅适用于 HTML。通常,它不知道您用它生成什么类型​​的文本。

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

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

此方法将允许实施 'escape by default' 政策。

有同样的问题。

我们发现还有指令 #disable_html_escaping() 可以放在模板的开头。