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

为何UTF-8格式的SVG Data URL中HEX十六进制颜色无法生效?

问题根本原因

UTF-8 格式的 SVG Data URL 中 HEX 颜色失效的核心原因是:# 是 URL 协议中的保留字符,作用是标识页面锚点。你直接将未转义的 # 放入 Data URL 中时,浏览器会把 # 之后的内容识别为锚点片段,直接截断 SVG 代码,导致 SVG 解析失败无法显示。
而 RGB 颜色写法没有用到 # 所以不受影响,Base64 编码会把所有特殊字符转成 Base64 字符集,自然也不会触发 URL 保留字符的解析逻辑,所以可以正常运行。

解决方案

你只需要将 HEX 颜色中的 # 转义为 URL 编码的 %23 即可正常使用,修改后的代码示例如下:

<img src='data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="100" width="100"><defs><style>.roundShape{fill:%2326a7fd;}</style></defs><circle cx="50" cy="50" r="40" class="roundShape" /></svg>'>

如果 SVG 内容中特殊字符较多,也可以对整个 SVG 字符串做 URI 编码后再放入 Data URL,示例如下:

<script>
const svgStr = `<svg xmlns="http://www.w3.org/2000/svg" height="100" width="100"><defs><style>.roundShape{fill:#26a7fd;}</style></defs><circle cx="50" cy="50" r="40" class="roundShape" /></svg>`;
const encodedSvg = encodeURIComponent(svgStr);
document.querySelector('img').src = `data:image/svg+xml;utf8,${encodedSvg}`;
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:48:03