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

Spring Boot+Thymeleaf应用法语校验消息HTML转义未解析问题求解

解决Thymeleaf显示法语国际化错误消息时HTML转义实体未解析的问题

这个问题我之前也碰到过,核心原因是Thymeleaf的th:errors默认会对输出内容做HTML转义,而你的国际化消息里已经是转义后的HTML实体(比如ê),所以它会被当成普通文本直接输出,不会被解析成对应的法语字符ê。下面给你两种可行的解决思路:


方案1:直接在国际化文件中使用原始法语字符(推荐)

最省心的方式是放弃HTML转义,直接在message_fr.properties里写入原始的法语特殊字符,同时确保Spring Boot正确读取UTF-8编码的配置文件:

  1. 修改message_fr.properties的内容:
    NotEmpty.item.title = Ne doit pas être null
    
  2. 在application.properties(或application.yml)中添加编码配置,确保Spring Boot以UTF-8读取国际化文件:
    spring.messages.encoding=UTF-8
    spring.messages.basename=messages
    

这样Thymeleaf的th:errors会自动正确渲染特殊字符,同时默认的HTML转义还能帮你防止XSS风险,一举两得。


方案2:让Thymeleaf解析已转义的HTML实体

如果因为某些原因必须保留国际化文件中的HTML转义实体,你可以通过以下两种方式让Thymeleaf解析这些实体:

方式A:使用th:utext代替th:errors

th:utext会关闭HTML转义,直接输出原始内容并解析HTML实体:

<span th:if="${#fields.hasErrors('title')}" th:utext="${#fields.errors('title')[0]}"></span>

注意:#fields.errors('title')返回的是错误消息列表,这里用[0]取第一条错误。

方式B:使用#strings.unescapeXml()手动解析实体

通过Thymeleaf的字符串工具类手动解析XML/HTML实体,再用th:text输出:

<span th:if="${#fields.hasErrors('title')}" th:text="${#strings.unescapeXml(#messages.msg('NotEmpty.item.title'))}"></span>

这种方式适合需要手动控制消息获取逻辑的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:34:14