前置知识: Markdown

转义字符

5 min入门

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 层的”别当语法”,实体是直接替换为另一个字符。

字符实体名称实体编号说明
<&lt;&#60;小于号(防止被当 HTML 标签)
>&gt;&#62;大于号
&&amp;&#38;与符号
"&quot;&#34;双引号
©&copy;&#169;版权符号
®&reg;&#174;注册商标
™&trade;&#8482;商标符号
—&mdash;&#8212;破折号
``无名称&#124;

典型用法:

AT&amp;T 公司
使用 &lt;div&gt; 创建容器
Copyright &copy; 2026 My Company

何时用实体而非反斜杠:需要显示的字符没有反斜杠转义语义时(如不换行空格 &nbsp;),或字符本身会被当作 HTML 解析时(< 开头的内容)。注意各渲染器对”允许哪些实体”不完全一致,CommonMark 会识别标准 HTML5 实体集合。

4. 常见陷阱

4.1 表格中的竖线

竖线是表格单元格的分隔符,单元格内容含竖线时必须转义:

| 命令           | 说明     |
| -------------- | -------- |
| `grep \| file` | 管道操作 |

GFM 规范明确:\| 即使在代码跨度内也会渲染为字面竖线;也可以用实体 &#124;。

4.2 文件名、正则里的星号与下划线

\*文件名: readme\*

含成对特殊字符的文本(如 _variable_、*.log)建议直接放进行内代码 `_variable_`,比逐个转义更可读。

4.3 LaTeX 公式的双重转义

在数学公式里反斜杠是命令前缀(\alpha、\frac),因此”在正文里展示一段 LaTeX 源码”时,反斜杠需要转义或放进代码跨度:

行内代码展示源码:`\alpha + \beta`

4.4 反斜杠行尾误伤

**加粗**\ 这样以反斜杠收尾的文本会触发硬换行,导致下一行莫名接排;排查”为什么换行失效/多出换行”时先看行尾反斜杠。

4.5 与扩展语法的叠加

GFM 删除线、任务列表等扩展符号(~、[ ])同样遵循反斜杠规则;但扩展语法在非 GFM 渲染器上本就不生效,转义与否结果不同——跨平台文档中这类字符优先用代码跨度包裹。

5. 平台差异速览

场景CommonMarkGFM说明
表格内 |无表格语法必须转义(含代码跨度内)实体 &#124; 亦可
行尾 \硬换行同两大规范一致
行首 \# \-阻止块级解析同字面输出字符
字母/数字前的 \保留反斜杠同不可转义

小结

  • 初学者要点:反斜杠转义标点,\*、\#、\| 是最常用的三个;字母数字转义不了(反斜杠会原样留下);代码块里什么都不用转义。
  • 进阶注意:CommonMark 允许转义全部 ASCII 标点而非仅”有语法的”字符;行尾反斜杠是硬换行特例;HTML 实体解决 Markdown 层转义不了的字符(&lt;、&#124;);表格竖线即使在代码跨度内也要转义。