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

Thymeleaf自定义属性下避免base64换行符转义的问题咨询

问题:Thymeleaf处理SVG模板时base64图片换行符被转义

我在使用Thymeleaf处理SVG模板,替换base64编码的嵌入式图片时遇到了问题。
原始标签代码如下:

<image
  width="100"
  height="100"
  id="image123"
  x="0"
  y="0"
  preserveAspectRatio="none"

  th:attr="'xlink:href'='data:image/png;base64,' + ${imageBase64}"

  xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAIAAAAiOjnJAAAAAXNSR0IArs4c6QAAAARnQU1BAACx
jwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAoRSURBVHhe7d09cts6FAVg663FSuHxCqgVyG5c

<MORE BASE64 DATA HERE...>

ggUqECxQgWCBCgQLVCBYoALBAhUIFqhAsEAFggUqECxQgWABwFicnf0PDRO+cnclXPUAAAAASUVO
RK5CYII=
"
/>

我使用的base64编码的图片数据每行包含76个字符加一个换行符(LF),需要保留这个结构,因为部分SVG渲染器遇到超长行时会解析失败。
当前遇到的问题是:当我将带换行符的base64字符串赋值给上下文变量imageBase64时,Thymeleaf会将LF字符转义为&#xa;,这会直接导致base64解码器无法正常工作。
我知道针对标签内文本可以使用th:utext属性避免转义,但在使用自定义属性时,有没有方法可以避免内容转义?

解答

你可以用Thymeleaf内置的无转义内联表达式直接解决这个问题,不需要额外扩展配置,步骤如下:

  1. 把原来的th:attr属性替换为直接给xlink:href赋值的写法,使用[(...)]包裹你要输出的变量,这个语法的作用就是原样输出内容不做任何HTML转义:
<image
  width="100"
  height="100"
  id="image123"
  x="0"
  y="0"
  preserveAspectRatio="none"
  th:xlink:href="|data:image/png;base64,[( ${imageBase64} )]|"
  xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAIAAAAiOjnJAAAAAXNSR0IArs4c6QAAAARnQU1BAACx
jwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAoRSURBVHhe7d09cts6FAVg663FSuHxCqgVyG5c
<MORE BASE64 DATA HERE...>
ggUqECxQgWCBCgQLVCBYoALBAhUIFqhAsEAFggUqECxQgWABwFicnf0PDRO+cnclXPUAAAAASUVO
RK5CYII=
"
/>

这里的|...|是Thymeleaf的字面量拼接语法,比普通字符串拼接写法更简洁。
2. 如果你有大量同类需要不转义输出属性的场景,也可以自定义Thymeleaf属性处理器,针对xlink:href这类属性跳过默认的转义逻辑,直接输出原始值,不过绝大多数场景下第一种方法就足够用了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:54:10