data:image/png;base64, 是前缀,不是一张完整图片。它说明资源内嵌在 URL 中:协议为 data,声明类型为 image/png,base64 标记表示后面的载荷使用 Base64。逗号将元数据与数据分开。
按结构读取
data:[媒体类型][;base64],载荷
data:text/plain;base64,SGVsbG8=
data:text/plain,Hello%20world
第一个示例通过 Base64 表示 Hello,第二个采用百分号编码。解析器需要先看元数据,再选择解码方法。将完整 URI 交给只接受 Base64 的解码器会失败,因为冒号、分号和逗号不是载荷字符。
应在第一个逗号处分割,不能拆分所有逗号:剩余数据本身可能包含逗号,尤其是未采用 Base64 的文本 URI。媒体参数可以放在 base64 标记前。省略媒体类型时,格式有默认文本类型与字符集,但默认值不会自动让二进制变成可读文字。
MIME 标签只是声明
任何输入都可以写上 image/png,它不能证明字节真的构成 PNG。应先比较文件签名,再用图像解码器加载。同样,PDF 文件头只是识别线索,完整解析仍可能失败。
将 image/png 改为 image/jpeg 不会转换图片。转换需要解码原图,再按目标格式重新编码,可能影响透明度、元数据、画质和体积。需要这些信息时应保留原件。
恢复资源,不执行内容
先解析检查。文本按文字显示,受支持的位图在图像元素中预览。不要把任意 HTML 或 SVG 标记直接插入页面。Data URL 可以包含活动内容,自包含并不等于安全。
下载时保留字节,并根据可靠格式信息选择扩展名。诊断界面应分别显示声明类型和检测类型,让不一致显式可见。语法和默认值见 MDN: data URLs。