转义字符
Markdown 转义机制:反斜杠的可转义字符集、行尾硬换行、HTML 实体与表格管道符等常见陷阱。
认知导入(Layer 0 生存层) 前置知识:004 强调语法(转义最常与之纠缠)。 边界说明:转义的本质是告诉解析器”这个字符是内容,不是格式标记”。本篇讲清两套转义体系——反斜杠(Markdown 层)与 HTML 实体(HTML 层)。 强制练习:输入
\*不是强调\*观察星号原样显示;删掉反斜杠再看星号如何变成强调。
1. 为什么需要转义
Markdown 用标点符号做格式标记。当这些字符出现在正文里、你又不希望它被解析时,就需要转义。典型场景:写”2 * 3 = 6”却不想让星号触发行内强调,写版本号 #1 却不想让它变标题。
\*不是强调\*
渲染结果:*不是强调*(星号原样显示)。去掉反斜杠则变成 强调。
2. 反斜杠转义
2.1 可转义字符集
CommonMark 的规则是:反斜杠可以转义任何 ASCII 标点符号,包括:
! " # $ % & ' ( ) * + , - . / :
; < = > ? @ [ \ ] ^ _ ` { | } ~
其中最常遇到的是有语法含义的那批字符:
| 字符 | 语法含义 | 转义写法 | 渲染结果 |
|---|---|---|---|
* _ | 强调 | \* \_ | 字面的星号/下划线 |
` | 行内代码 | \` | 字面的反引号 |
# | 标题 | \# | 行首井号不构成标题 |
- + | 列表标记 | \- \+ | 行首减号/加号不构成列表 |
. | 有序列表 | 1\. 文本 | 行首编号不构成列表 |
> | 引用 | \> | 行首大于号不构成引用 |
[ ] | 链接与图片 | \[ \] | 字面方括号 |
! | 图片前缀 | \! | 字面感叹号 |
| ` | ` | 表格分隔 | | |
~ | GFM 删除线 | \~ | 字面波浪号 |
\ | 转义前缀自身 | \\ | 一个字面反斜杠 |
记忆方法:ASCII 标点都能转义,非标点(字母、数字、汉字)不能。
2.2 两条核心规则
规则一:反斜杠 + 可转义字符(ASCII 标点)→ 反斜杠消失,字符原样输出。
\#不是标题
2 \* 3 = 6
规则二:反斜杠 + 不可转义字符(字母、数字等)→ 反斜杠原样保留。
\A 渲染为 \A(字母不能转义,反斜杠留了下来)
\3 渲染为 \3
因此”多打一个反斜杠保险”是错误直觉:\A 不会变成 A,而是把反斜杠显式地写进了正文。
特例:反斜杠在行尾 = 硬换行。
第一行\
第二行
渲染为第一行之后紧跟 <br> 再接第二行(详见 markdown/030-ParagraphLineBreak)。想在行尾显示字面反斜杠,写成 \\。
2.3 代码跨度与代码块内无需转义
反引号包裹的行内代码与围栏代码块内的内容不做 Markdown 解析,任何符号都不需要转义:
```
*这里的星号、#井号、[方括号] 都是字面文本*
```
唯一例外是 GFM 表格:即使在代码跨度里,竖线也建议用 \| 转义(见 4.1 节)。
3. HTML 实体转义
Markdown 输出 HTML,因此 HTML 实体(&名称; 或 &#编号;)在正文里同样可用。实体与反斜杠的区别:反斜杠是 Markdown 层的”别当语法”,实体是直接替换为另一个字符。
| 字符 | 实体名称 | 实体编号 | 说明 |
|---|---|---|---|
< | < | < | 小于号(防止被当 HTML 标签) |
> | > | > | 大于号 |
& | & | & | 与符号 |
" | " | " | 双引号 |
© | © | © | 版权符号 |
® | ® | ® | 注册商标 |
™ | ™ | ™ | 商标符号 |
— | — | — | 破折号 |
| ` | ` | 无名称 | | |
典型用法:
AT&T 公司
使用 <div> 创建容器
Copyright © 2026 My Company
何时用实体而非反斜杠:需要显示的字符没有反斜杠转义语义时(如不换行空格 ),或字符本身会被当作 HTML 解析时(< 开头的内容)。注意各渲染器对”允许哪些实体”不完全一致,CommonMark 会识别标准 HTML5 实体集合。
4. 常见陷阱
4.1 表格中的竖线
竖线是表格单元格的分隔符,单元格内容含竖线时必须转义:
| 命令 | 说明 |
| -------------- | -------- |
| `grep \| file` | 管道操作 |
GFM 规范明确:\| 即使在代码跨度内也会渲染为字面竖线;也可以用实体 |。
4.2 文件名、正则里的星号与下划线
\*文件名: readme\*
含成对特殊字符的文本(如 _variable_、*.log)建议直接放进行内代码 `_variable_`,比逐个转义更可读。
4.3 LaTeX 公式的双重转义
在数学公式里反斜杠是命令前缀(\alpha、\frac),因此”在正文里展示一段 LaTeX 源码”时,反斜杠需要转义或放进代码跨度:
行内代码展示源码:`\alpha + \beta`
4.4 反斜杠行尾误伤
**加粗**\ 这样以反斜杠收尾的文本会触发硬换行,导致下一行莫名接排;排查”为什么换行失效/多出换行”时先看行尾反斜杠。
4.5 与扩展语法的叠加
GFM 删除线、任务列表等扩展符号(~、[ ])同样遵循反斜杠规则;但扩展语法在非 GFM 渲染器上本就不生效,转义与否结果不同——跨平台文档中这类字符优先用代码跨度包裹。
5. 平台差异速览
| 场景 | CommonMark | GFM | 说明 |
|---|---|---|---|
表格内 | | 无表格语法 | 必须转义(含代码跨度内) | 实体 | 亦可 |
行尾 \ | 硬换行 | 同 | 两大规范一致 |
行首 \# \- | 阻止块级解析 | 同 | 字面输出字符 |
字母/数字前的 \ | 保留反斜杠 | 同 | 不可转义 |
小结
- 初学者要点:反斜杠转义标点,
\*、\#、\|是最常用的三个;字母数字转义不了(反斜杠会原样留下);代码块里什么都不用转义。 - 进阶注意:CommonMark 允许转义全部 ASCII 标点而非仅”有语法的”字符;行尾反斜杠是硬换行特例;HTML 实体解决 Markdown 层转义不了的字符(
<、|);表格竖线即使在代码跨度内也要转义。