将百里香变量处理为html代码而不是文本


68

我正在使用Thymeleaf处理html模板,我了解了如何从控制器添加内联字符串,但是现在我想将html代码片段添加到页面中。

例如,让我在我的Java应用程序中拥有它:

String n="<span><i class=\"icon-leaf\"></i>"+str+"</span> <a href=\"\"></a>\n";

final WebContext ctx = new WebContext(request, response, 
                                      servletContext, request.getLocale());
ctx.setVariable("n",n);

我需要在html页面中写些什么,以便将其替换为“ n”变量并作为html代码处理,而不是将其编码为文本?

Answers:


112

您可以使用th:utext代表未转义文本的属性(请参阅文档)。请谨慎使用,并避免用户输入,th:utext因为这可能会导致安全问题。

<div th:remove="tag" th:utext="${n}"></div>


呈现PDF时,此功能是否也适用于Apache FOP。因为我看不到添加utext标签的任何更改。
Dhiraj Gandhi

我尝试了此操作,但实际上每个使用的HTML标记都会引发一个错误,说它需要一个结束标记,即使存在结束标记也是如此。
杰克逊·布雷

2
需要注意的重要事项:使用utext会使您容易受到跨站点脚本攻击的攻击。攻击者可以将恶意HTML存储在您的n变量中,该变量将在每次在用户的浏览器中呈现页面时执行。参见owasp.org/index.php/…–
GabiM,

0

如果需要简写语法,可以使用以下命令:

[(${variable})]

转义的简写语法是

[[${variable}]]

但是如果您[用常规(的方括号更改内方括号,则HTML不会转义。

标签内的示例:

<div>
    [(${variable})]
</div>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.