【问题标题】:Process thymeleaf variable as html code and not text将 thymeleaf 变量处理为 html 代码而不是文本
【发布时间】:2014-06-03 02:36:31
【问题描述】:

我正在使用 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 代码处理,而不是将其编码为文本?

【问题讨论】:

    标签: java thymeleaf


    【解决方案1】:

    如果你想要简写语法,你可以使用以下:

    [(${variable})]
    

    转义的简写语法是

    [[${variable}]]
    

    但如果您将内部方括号 [ 更改为常规的 (,则 HTML 不会被转义。

    标签内的示例:

    <div>
        [(${variable})]
    </div>
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 更新了 v3 的链接thymeleaf.org/doc/tutorials/3.0/…
      • 在呈现 PDF 时这是否也适用于 Apache FOP。因为我没有看到添加 utext 标签的任何变化。
      • 我试过这个,但它确实会为我使用的每个 HTML 标签抛出一个错误,说它需要一个结束标签,即使存在结束标签。
      • 需要注意的重要一点:使用 utext 会使您容易受到跨站点脚本攻击。攻击者可以将恶意 html 存储在您的 n 变量中,每次在您的用户浏览器上呈现页面时都会执行该变量。见owasp.org/index.php/…
      猜你喜欢
      • 2021-03-11
      • 1970-01-01
      • 2018-07-12
      • 2018-02-26
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多