在springTemplateEngine中转义引号

时间:2018-04-29 17:27:42

标签: java spring special-characters template-engine

我有一个使用springTemplateEngine生成非html文本的方法。 我的模板如下所示:

some text
[[${variable}]]

但是当我运行模板引擎时,variable设置为带引号的字符串:

string with "" quotes

引号被替换为html代码:

some text
string with "" quotes

有没有办法逃避这种行为并在结果字符串中出现实际引号?

所需的输出应为

some text
string with "" quotes

1 个答案:

答案 0 :(得分:2)

从您的变量语法,我假设您使用Themeleaf作为您的TemplateEngine。

您可以使用[(${variable})]语法来省略变量的转义。这是在Themeleaf 3中引入的。

请参阅Themeleaf issue tracker上的转义:

  

<强>逃逸

     

这些[[...]]表达式与Thymeleaf 2.1中的表达式一样,对输出执行转义操作。因此,如果我们的title变量String值为"this & that",那么:

<p>Title: [[${title}]]</p>
     

将导致:

<p>Title: this &amp; that</p>
     

但是,如果我们需要未转义输出怎么办?我们可能有一个comment变量,其值This is a <strong>great</strong> song!我们知道包含HTML(请参阅那些<strong>标记)我们想要输出而不会被转义...

     

在这种情况下,我们可以使用非转义输出表达式,语法为[(...)](注意内括号而不是括号)。所以:

<p>Title: [[${title}]]</p>
<p>Description: [(${description})]</p>
     

...将导致:

<p>Title: this &amp; that</p>
<p>Description: This is a <strong>great</strong> song!</p>
     

因此,我们看到上述内容完全等同于:

<p>Title: <th:block th:text="${title}"/></p>
<p>Description: <th:block th:utext="${description}"/></p>