Thymeleaf文本模板特殊字符解析问题求助
解决Thymeleaf OGNL表达式单引号解析错误
嘿,我之前也踩过这个坑!你遇到的问题是OGNL和Thymeleaf的引号解析规则冲突导致的——OGNL里本来用两个单引号转义内部单引号,但直接写在th:text的表达式里会触发解析异常。下面给你几个实用的解决方案:
方案1:用双引号包裹OGNL字符串
OGNL支持用双引号定义字符串,这样内部的单引号就不用转义了。注意因为Thymeleaf的属性值本身是双引号包裹的,所以要对表达式里的双引号加反斜杠转义:
[# th:text="${\"What's up?\"}" /]
这样OGNL能正确识别字符串,Thymeleaf也能正常解析整个属性。
方案2:用Thymeleaf内联文本语法
内联文本[[...]]的写法更清爽,处理特殊字符也更省心,不需要纠结转义问题:
[[${'What''s up?'}]]
如果这段文本不需要从变量取值,甚至可以直接写静态文本(Thymeleaf会自动帮你处理HTML转义):
[[What's up?]]
方案3:处理&这类HTML实体
如果你的需求里包含&这类特殊字符,默认的th:text会自动把&转成&(HTML转义)。要是你想输出原始的HTML实体,或者不需要转义,可以用th:utext:
[# th:utext="${'What\'s up? & welcome!'}" /]
⚠️ 注意:th:utext会直接渲染HTML内容,要警惕XSS风险,别用在用户输入的内容上。
最后补个小知识点:OGNL的单引号转义规则是两个单引号代表一个单引号,但在Thymeleaf的属性上下文里容易和模板的引号处理冲突,所以优先用双引号或者内联语法会更稳妥。
内容的提问来源于stack exchange,提问作者hack
相关产品推荐
相关产品推荐

