HTML 转 Base64
将 HTML 代码编码为 Base64 Data URL。即时生成 iframe 嵌入代码、浏览器下载链接和 JavaScript 示例——无需服务器,直接在浏览器中嵌入或分发 HTML。
输出
典型应用场景
iframe 沙箱嵌入
在网页中嵌入一段独立的 HTML 内容,无需额外的 HTML 文件或服务器端点。常用于代码预览、在线编辑器、文档内嵌演示。
<iframe src="data:text/html;base64,…" sandbox></iframe>浏览器端文件下载
利用带 download 属性的链接标签和 Data URL 在浏览器中生成 HTML 文件并触发下载,无需任何服务器。适合在线编辑器的"导出"功能。
<a href="data:text/html;base64,…" download="page.html">Download</a>邮件内嵌 HTML
某些邮件客户端支持在邮件中嵌入 Base64 编码的 HTML 内容,不依赖外部服务器,适合离线阅读场景。
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: base64Chrome 扩展 / Electron
在 Chrome 扩展 popup 或 Electron 应用中动态插入 HTML 内容,使用 Data URL 可以避免文件系统访问权限问题。
webContents.loadURL(`data:text/html;base64,${b64}`)四种输出格式
工具使用 TextEncoder 将 HTML 字符串转为 UTF-8 字节,再编码为 Base64,正确处理中文、emoji 等 Unicode 字符。
Data URL
完整的 data:text/html;base64,… 字符串,可直接用于任何接受 URL 的 HTML 属性。
iframe 嵌入
含 sandbox 属性的完整 iframe 标签,直接粘贴到页面中即可嵌入 HTML 内容。
下载链接
带 download 属性的链接标签,用户点击后浏览器直接下载 HTML 文件,无需服务器。
JS 代码
包含 UTF-8 安全编码函数、动态创建 iframe、触发下载和 Node.js 版本的完整代码示例。
iframe sandbox 属性参考
sandbox最严格,禁止所有脚本、表单、弹窗
sandbox="allow-scripts"允许 JavaScript 执行
sandbox="allow-same-origin"允许当前 origin 的资源访问
sandbox="allow-forms"允许表单提交
sandbox="allow-popups"允许打开新窗口
常见问题
HTML Data URL 可以直接用在 iframe src 里吗?
可以,data:text/html;base64,… 是合法的 iframe src。但现代浏览器(尤其 Chrome 60+)已限制导航到 data: URL,嵌套在非顶层帧中的 data: URL 可能被拦截。推荐添加 sandbox 属性并只开启必要权限(如 allow-scripts allow-same-origin)以提升安全性和兼容性。
HTML Base64 Data URL 有长度限制吗?
URL 本身理论上没有硬性限制,但浏览器和操作系统会有实际约束。Chrome 对 data: URL 的限制约为 2 MB,过大的 HTML 可能导致页面加载缓慢或被截断。建议小于 512 KB 的 HTML 使用 Data URL,更大的文件应通过服务器传输。
为什么要把 HTML 编码为 Base64 而不是直接使用文件链接?
当你需要在没有服务器的环境中分发 HTML(如邮件内嵌、Chrome 扩展、Electron 应用内部)时,Data URL 非常有用。它可以将完整 HTML 页面嵌入为单个字符串,无需任何文件系统访问或网络请求。
HTML 中含有中文或特殊字符时编码正确吗?
工具使用 TextEncoder 将 HTML 字符串转为 UTF-8 字节,再进行 Base64 编码,完全支持中文、emoji 和其他 Unicode 字符。记得在 HTML 中包含 charset=UTF-8 的 meta 声明,以确保浏览器正确解码。
下载链接(download attribute)在所有浏览器都有效吗?
download 属性在所有现代浏览器(Chrome、Firefox、Edge、Safari 14+)中都支持。对于 data: URL,Safari 在早期版本中支持有限,但 Safari 14 及以后版本可以正常使用。IE 11 不支持此属性。
如何在 Node.js 中将 HTML 编码为 Base64?
const b64 = Buffer.from(htmlString, "utf-8").toString("base64")。生成 Data URL:const dataUrl = "data:text/html;base64," + b64。解码:const html = Buffer.from(b64, "base64").toString("utf-8")。