You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thymeleaf字符串替换求助:撇号被转义为'后无法正常显示的问题

解决Thymeleaf中单引号被转义为'的问题

嘿,我来帮你搞定这个Thymeleaf的单引号转义问题!你遇到的情况是Thymeleaf默认会对HTML特殊字符进行转义,单引号(')属于被转义的字符,所以会被转换成'。下面给你几个靠谱的解决方案:

方案1:使用Thymeleaf的非转义文本表达式(最推荐)

Thymeleaf提供了th:utext属性来输出未转义的文本,它不会对特殊字符进行转义,直接输出原始内容。

如果你之前是用th:text来渲染字符串:

<p th:text="${body}"></p>

把它改成th:utext就可以正常显示撇号了:

<p th:utext="${body}"></p>

这个方法最直接,而且能一次性解决所有特殊字符的转义问题,包括你字符串里的L' autorizzazione这类内容。

方案2:在后端或Thymeleaf中手动替换转义字符

如果你因为安全原因(比如担心XSS攻击)不想使用th:utext,可以手动把转义后的&#39;替换回单引号。

在Thymeleaf模板中替换

修正你之前的#strings.replace语法错误,正确的写法应该是:

<p th:text="${#strings.replace(body, '&#39;', '\'')}"></p>

在后端代码中处理

从数据库查询到字符串后,先在Java代码里替换转义字符,再传给模板:

String body = result.getBody();
body = body.replace("&#39;", "'");
model.addAttribute("body", body);

关于你现有代码的小提示

你SQL存储的字符串里有L'' autorizzazione,这是SQL中对单引号的转义写法(两个单引号表示一个),所以从数据库取出后应该已经是L' autorizzazione了。如果用th:utext,这个撇号会直接显示出来,不需要额外处理。

另外你代码里的#numbers.formatDecimal部分看起来有语法错误,比如#strings.replace(amount,'','',''.''),正确的格式应该是类似这样(假设你要替换千分位和小数点):

${#numbers.formatDecimal(#strings.replace(amount, ',', '.'), 1, 'POINT', 2, 'COMMA')}

内容的提问来源于stack exchange,提问作者Sonn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 20:42:40