html转义字符还原最稳用domparser:new domparser().parsefromstring(htmlstr,"text/html").body.textcontent,可全量解码命名、十进制、十六进制实体。

html转义字符怎么还原成正常文本
直接用 DOMParser 最稳,别信那些正则替换的“一行解法”——< 会被误判成标签,' 这种十六进制实体也容易漏掉。
常见错误现象:innerHTML = "<div>hello</div>" 直接赋值,结果页面真显示出了 <div> 字符串,而不是渲染成 div。
- 用
new DOMParser().parseFromString(htmlStr, "text/html")解析后取body.textContent,能覆盖所有标准 HTML 实体(包括十进制、十六进制、命名实体) - 如果只是简单场景且确定输入可控,可用
textarea中转:const t = document.createElement("textarea"); t.innerHTML = str; return t.value;,但注意它不支持😂这类 emoji 实体 - Node.js 环境别硬套浏览器 API,改用
he.decode()(需装he包),它比原生DOMParser更轻、更全
在线工具把 HTML 转成 Markdown 总丢格式怎么办
核心问题不是工具不行,是 HTML 源本身没语义化——<div class="title"> 和 <code><h2></h2> 对转换器来说完全是两回事。
使用场景:从富文本编辑器导出 HTML 后想转 Markdown 发文档或写博客,结果标题变段落、列表全扁平、代码块消失。
立即学习“前端免费学习笔记(深入)”;
- 先清理 HTML:用
sanitize-html或DOMPurify剥离无意义 class/id,把<div> 套 <code><strong></strong>的结构手动改成语义标签 - 选对工具:浏览器端推荐
turndown(支持自定义规则),命令行用html2md时加--gfm开启 GitHub 兼容模式,否则表格、任务列表会失效 - 特别注意
<pre class="brush:php;toolbar:false;"><code></code> 嵌套层级:有些工具只认 <code><code></code> 在 <code><pre class="brush:php;toolbar:false;"></pre>里,如果源 HTML 是<code class="js">单独存在,高亮语言信息就丢了 -
pdfmake必须预处理字体:用pdfmake/fonts工具把 ttf 转成 base64 字符串,再在vfs.js里注册,漏一步就空白 -
jsPDF+html2canvas组合更灵活,但要设useCORS: true且服务端允许跨域,否则图片和字体资源加载失败静默丢弃 - 服务端生成(如 Puppeteer)最省心:
page.pdf({ fontEmbedding: true })自动处理,但得确保 Docker 容器里装了fonts-wqy-zenhei这类中文字体包 - 开发阶段用
npx http-server起个本地服务,地址变成http://localhost:8080就一切正常 - 如果必须离线运行,改用
FileReader读取本地文件:input[type="file"]触发后调readAsText,绕过网络请求 - Electron 或 Tauri 应用不受此限,但要注意
webPreferences.contextIsolation开启后,需用预加载脚本暴露fsAPI
HTML 转 PDF 时中文不显示或乱码
90% 是字体没嵌入,不是编码问题——utf-8 已是默认,但多数 PDF 生成库(如 pdfmake、jsPDF)自带字体不包含中文字形。
性能影响明显:强行用 addFont 加载 10MB 的 Noto Sans CJK,首屏生成延迟从 200ms 拉到 2s+。
为什么本地双击打开 HTML 文件转 JSON 会失败
因为浏览器同源策略限制:file:// 协议下,fetch("./data.html") 或 XMLHttpRequest 直接被拒,控制台报 net::ERR_FAILED,不是代码写错了。
容易踩的坑:调试时以为是路径写错,反复改 ./ ../,其实根本没发出去请求。
真正麻烦的是混合场景:HTML 里有相对路径的 CSS/JS,用 FileReader 读进来后这些资源全 404——这时候不是转格式的问题,是整个加载模型得重设计。










