Thymeleaf模板引擎双重转义特殊字符,如何避免该问题?
解决Thymeleaf特殊字符自动转义的问题
这问题我之前开发时也踩过坑!Thymeleaf的[[...]]内联表达式默认会自动转义HTML特殊字符,所以你的sample&.text才会被转成sample&.text。要避免这种情况,有两种实用的解决方法:
方法一:使用不转义的内联表达式
Thymeleaf提供了专门的不转义内联语法[(...)],用它替代[[...]]就能直接输出原始文本,不会转义特殊字符。修改你的模板文件即可:
<html xmlns:th="http://www.thymeleaf.org" th:inline="text" th:remove="tag"> [(${data.fileName})][[${T(abc.composer.NoteData).COMPLETED_NO_ERRORS}]] </html>
如果COMPLETED_NO_ERRORS常量里也有特殊字符,同样可以把它的[[...]]换成[(...)];如果没有特殊字符,保持原样也完全没问题。
方法二:使用th:utext属性输出不转义内容
如果你更习惯用标签属性的方式,也可以用th:utext(unescaped text)来替代默认的th:text(会自动转义)。修改后的模板可以写成这样:
<span th:utext="${data.fileName}" th:remove="tag"></span> <span th:text="${T(abc.composer.NoteData).COMPLETED_NO_ERRORS}" th:remove="tag"></span>
这种方式适合结构更复杂的模板场景,不过内联表达式会更简洁直观。
重要提醒
使用不转义输出时,一定要确保你的data.fileName内容是安全的!如果这个值来自用户输入,务必先做XSS防护校验,避免恶意HTML/JS代码被直接渲染到页面中。
内容的提问来源于stack exchange,提问作者user123
相关产品推荐
相关产品推荐

