sublime text无法一键解码html实体,因命名、十进制、十六进制三类实体结构不同,需按&先转义→数字实体分步处理→白名单匹配顺序手动正则替换。

Sublime Text 不能直接解码 HTML 实体(如 &、、<code>"),也没有内置函数做批量转义/反转义——所有“转换”都得靠手动正则匹配 + 替换,且必须分场景、分实体类型逐个处理。
为什么 & <code>> 不能用一条正则全替换
因为 HTML 实体有三类:命名实体(&)、十进制数字实体()、十六进制数字实体(<code>),它们结构不同,无法用一个模式安全覆盖。更关键的是:<code>& 必须最先处理(否则 < 会被错当成字面量),而 ..; 和 ...; 的位数不固定,.*? 容易跨实体“吃多”。
- 错误写法:
&(.*?);→ 会把©当成一个匹配,只替第一个 - 正确顺序:先
&,再[0-9a-fA-F]+;,最后[0-9]+; - 命名实体必须白名单处理:
&(amp|lt|gt|quot|apos);,别用&\w+;——会误伤&custom;这类自定义实体
& <code>> " ' 手动映射表
查找和替换必须严格一一对应,且注意转义。在 Sublime 中,替换栏里的 &、、<code>> 等符号无需额外转义,但查找栏里 & 前的 & 必须写全。
- 查找:
&→ 替换:& - 查找:
<→ 替换: - 查找:
>→ 替换:> - 查找:
"→ 替换:" - 查找:
'→ 替换:'
⚠️ 注意:' 在 HTML4 中不被标准支持,部分老浏览器不识别,但 Sublime 替换时仍可按需处理。
数字实体 和 <code> 怎么安全替换
数字实体必须用 PCRE 的 \x{...} 或 \u 语法反向生成字符,但 Sublime 不支持在替换栏执行 Unicode 解码——只能靠查表或分步替换。最稳做法是用 JavaScript 引擎预处理,或在 Sublime 中用正则 + 多次替换模拟。
- 十进制:
([0-9]+);→ 替换栏不能写\u$1(无效),需人工映射常见值:
→ <code>,<code>>→>,"→",'→' - 十六进制:
([0-9a-fA-F]+);→ 同样不能自动解码,→ <code>,<code>>→>,"→" - 别用
[0-9]+匹配所有数字实体——😀(emoji)会炸掉替换性能,且 Sublime 无法渲染
反向操作:把特殊字符转成 &xxx; 实体
这是前端模板、邮件内容、XML 输出的刚需。但 Sublime 没有编码函数,只能靠有限字符白名单 + 正则批量替换。
- 双引号:
"→" - 单引号:
'→'(或',更通用) - 小于号:
→ <code>< - 大于号:
>→> - 和号:
&→&(必须第一步,否则后续替换会二次转义)
⚠️ 关键细节:顺序不能错。& 必须第一个替换,否则 会被替成 <code><,再被误认为新实体;所有替换都要关掉 . matches newline,避免跨行污染。











