Markdown 特殊符號完全指南
寫 Markdown 的時候,符號問題大概是大家碰到最多的困惑之一。你可能遇過這些場景:
- 想顯示一個星號
*,結果變成了斜體或粗體的標記 - 輸入
#開頭的文字,被當成標題渲染了 - 需要插入一個版權符號 © 或者註冊商標 ®,但鍵盤上根本找不到
- 寫數學公式的時候,
<和>被當成 HTML 標籤吞掉了
這些問題說到底都跟 Markdown 特殊符號有關。這篇文章就來把這件事徹底講清楚——哪些符號在 Markdown 裡有特殊含義、怎麼讓它們原樣顯示、以及如何在 Markdown 中插入各種你需要的符號。
Markdown 中的格式控制符號
先搞清楚一件事:Markdown 本身並沒有「保留字」的概念,它的語法全部建立在標點符號上。CommonMark 規範定義了以下這些字元,它們在特定位置出現時會被當作格式標記:
| 符號 | 字元 | Markdown 中的用途 |
|---|---|---|
| 星號 | * | 粗體、斜體、無序列表 |
| 底線 | _ | 粗體、斜體 |
| 井號 | # | 標題(H1-H6) |
| 反引號 | ` | 行內程式碼、程式碼區塊 |
| 方括號 | [ ] | 連結文字、圖片 alt 文字 |
| 圓括號 | ( ) | 連結網址、圖片網址 |
| 尖括號 | < > | HTML 標籤、自動連結 |
| 大括號 | { } | 某些擴展語法(如 LaTeX 公式) |
| 加號 | + | 無序列表 |
| 減號/連字號 | - | 無序列表、水平線、表格 |
| 句號 | . | 有序列表(配合數字) |
| 驚嘆號 | ! | 圖片標記 |
| 豎線 | \| | 表格列分隔 |
| 波浪號 | ~ | 刪除線(GFM 擴展) |
| 美元符 | $ | LaTeX 數學公式(部分平台) |
| 脫字號 | ^ | 上標(部分擴展) |
關鍵的一點:這些符號並不是在任何地方都有特殊含義。比如 * 單獨出現在句子中間通常不會觸發格式化,只有出現在詞語兩端時才會變成斜體標記。# 只有在行首時才代表標題。
讓特殊符號原樣顯示:三種方法
知道了哪些符號有特殊含義,接下來的問題就是——我只想顯示這個符號本身,不想讓它變成格式標記,怎麼辦?有三種方法。
方法一:反斜線轉義(最常用)
在符號前面加一個反斜線 \,Markdown 解析器就會跳過它,直接顯示原字元。這是 CommonMark 規範定義的標準機制。
\*這不是斜體\*
\# 這不是標題
\[這不是連結\](https://example.com)渲染結果:
*這不是斜體* # 這不是標題 [這不是連結](https://example.com)
CommonMark 規範明確列出了 12 個可以透過反斜線轉義的 ASCII 標點字元:
\ ` * _ { } [ ] ( ) # + - . ! |說句實話,大部分情況下你只需要記住 \*、\#、\| 這幾個最常用的就夠了。其他符號在正常寫作中很少需要轉義。
有一點要注意:反斜線只能轉義上面列表中的字元。如果你寫 \a 或者 \中,反斜線本身會被原樣保留,顯示為 \a 和 \中。
方法二:行內程式碼和程式碼區塊
如果你有一大段內容需要顯示特殊符號,用反斜線逐個轉義太麻煩了。這時候用行內程式碼(反引號包裹)或者程式碼區塊會更方便:
行內程式碼:
變數名格式是 `file_name_v2.txt`,密碼是 `P@ss#word!`行內程式碼裡的所有內容都會原樣顯示,Markdown 不會對它做任何格式化處理。
程式碼區塊:
```javascript
const regex = /[.*+?^${}()|[\]\\]/g;
const price = "$5 - $10";
程式碼區塊裡的特殊符號也不需要任何轉義,直接寫就行。這個方案特別適合展示設定檔、正規表示式、程式碼片段這類包含大量特殊字元的內容。
### 方法三:HTML 實體
HTML 實體是用 `&` 開頭、`;` 結尾的特殊編碼,比如 `©` 顯示為 ©。Markdown 本身是 HTML 的超集,所以所有 HTML 實體在 Markdown 中都能直接使用。
這個方法主要用於兩種場景:
1. **需要插入鍵盤上沒有的符號**(版權、商標、數學符號等)
2. **尖括號 `<` `>` 在某些解析器中轉義不穩定**,用 `<` 和 `>` 更可靠
```markdown
版權所有 © 2024
註冊商標 ®
小於號 < 大於號 >
省略號…渲染結果:
版權所有 © 2024 / 註冊商標 ® / 小於號 < 大於號 > / 省略號…
常用符號速查表
下面這些是寫 Markdown 時最常需要的符號,按類別整理好了。
版權與商標符號
| 符號 | HTML 實體 | Unicode 編碼 | 說明 |
|---|---|---|---|
| © | © | © | 版權符號 |
| ® | ® | ® | 註冊商標 |
| ™ | ™ | ™ | 商標 |
| ℠ | ℠ | ℠ | 服務標誌 |
| § | § | § | 章節符號 |
貨幣符號
| 符號 | HTML 實體 | Unicode 編碼 | 說明 |
|---|---|---|---|
| ¥ | ¥ | ¥ | 人民幣/日圓 |
| € | € | € | 歐元 |
| £ | £ | £ | 英鎊 |
| ¢ | ¢ | ¢ | 美分 |
| $ | $ 或 \$ | $ | 美元(注意數學公式衝突) |
對了,美元符號 $ 有個坑——如果你的 Markdown 編輯器或平台支援 LaTeX 數學公式(比如 Obsidian、Jupyter Notebook),$ 會被當成數學公式的定界符。我有一次在 Obsidian 裡寫 價格是 $5 - $10,結果中間的 5 - 被當成數學表達式渲染了,搞得排版一團糟。遇到這種情況,要麼用 \$ 轉義,要麼把價格放在行內程式碼裡寫 `$5 - $10`。
箭頭符號
| 符號 | HTML 實體 | 說明 |
|---|---|---|
| → | → 或 → | 右箭頭 |
| ← | ← 或 ← | 左箭頭 |
| ↔ | ↔ | 左右箭頭 |
| ⇒ | ⇒ | 雙線右箭頭 |
| ⇐ | ⇐ | 雙線左箭頭 |
| ↑ | ↑ | 上箭頭 |
| ↓ | ↓ | 下箭頭 |
數學與邏輯符號
| 符號 | HTML 實體 | 說明 |
|---|---|---|
| ± | ± | 正負號 |
| × | × | 乘號 |
| ÷ | ÷ | 除號 |
| ≠ | ≠ | 不等於 |
| ≤ | ≤ | 小於等於 |
| ≥ | ≥ | 大於等於 |
| ≈ | ≈ | 約等於 |
| ∞ | ∞ | 無窮大 |
| √ | √ | 根號 |
| ∑ | ∑ | 求和 |
| ∏ | ∏ | 求積 |
| ∫ | ∫ | 積分 |
| ∴ | ∴ | 所以 |
| ∵ | ∵ | 因為 |
排版符號
| 符號 | HTML 實體 | 說明 |
|---|---|---|
| — | — | 破折號(中文常用) |
| – | – | 短破折號 |
| … | … | 省略號 |
| • | • | 圓點(列表符) |
| ° | ° | 度數符號 |
| ‰ | ‰ | 千分號 |
| ′ | ′ | 角分(分鐘) |
| ″ | ″ | 角秒(秒) |
  | 全形空格 | |
  | 半形空格 | |
| 不斷行空格 |
不同平台的符號處理差異
這是很多教學不會講到的部分,但在實際使用中真的很重要。同一個 Markdown 檔案,在不同平台上符號的處理方式可能不一樣。
GitHub(GFM)
GitHub 使用的是 GitHub Flavored Markdown,它對 CommonMark 做了一些擴展。大部分轉義行為和 CommonMark 一致,但有幾個不同:
- 表格中的豎線
|不需要轉義(它在表格結構中是分隔符,如果不在表格中就是普通字元) - 波浪號
~可以用來建立刪除線~~刪除~~ - 美元符號
$在 GitHub 上是普通字元,不會被當成數學公式分隔符(GitHub 的數學公式支援是後來加的,需要使用```math程式碼區塊語法)
Obsidian
Obsidian 對 Markdown 做了很多擴展,符號處理有些特殊:
$預設是 LaTeX 行內數學公式的定界符,$$是區塊級數學公式- 如果你要顯示字面的
$符號,必須轉義\$或者用行內程式碼 %%是 Obsidian 的註解標記(不會出現在渲染輸出中)
Typora
Typora 的行為和 CommonMark 比較接近,但:
- 它支援 LaTeX 數學公式(
$/$$) - 某些 HTML 實體在即時預覽模式下可能不顯示,但匯出時是正確的
VS Code 預覽
VS Code 的 Markdown 預覽基於不同的插件,行為取決於你安裝了什麼:
- 內建預覽遵循 CommonMark 規範
- 如果裝了 Markdown Math 插件,
$會被當成數學公式分隔符 - 建議檢查你目前的預覽插件設定
我自己的經驗是:如果文件需要在多個平台使用,儘量用行內程式碼來包裹特殊符號,這是相容性最好的方案。轉義字元在大部分平台都能正常運作,但數學公式相關的 $、~、^ 這幾個符號在不同平台差異最大,要特別留意。
什麼時候不需要轉義
不是所有特殊符號都需要轉義。以下場景中,符號會自動作為普通字元顯示:
在程式碼區塊和行內程式碼中,所有 Markdown 語法都不生效:
這段文字裡的 *星號* 和 #井號 都會原樣顯示在 HTML 標籤內部,Markdown 語法通常不解析:
<div>這裡的 *星號* 不會變成斜體</div>符號出現在不會觸發格式的位置,比如 * 出現在句子中間但沒有包裹詞語,或者 # 不在行首:
這是一段包含*的文字,星號不會被處理
這個 # 不是標題不過說實話,這種「自動不觸發」的行為在不同解析器之間可能不一致,如果你需要確保某個符號一定原樣顯示,還是老老實實轉義或用程式碼包裹更穩妥。
特殊符號的常見問題
為什麼 --- 變成了一條橫線?
三個減號 --- 在 Markdown 中是水平分隔線 <hr> 的語法。如果你只是想顯示三個減號,可以轉義第一個:\---,或者用行內程式碼 `---`。
表格裡的豎線怎麼顯示?
表格語法本身就用豎線 | 做列分隔。如果你需要在表格內容中顯示豎線,用 |(豎線的 HTML 實體編碼)。
| 符號 | 寫法 |
|------|------|
| 豎線 | | |為什麼 < 和 > 後面的內容消失了?
尖括號在 Markdown 中有雙重身份——它們既是 HTML 標籤的標記,也可能觸發自動連結。如果你寫的不是合法的 HTML 標籤,內容可能會被吞掉。用 < 和 > 代替是最保險的做法。
連續空格為什麼只剩一個?
Markdown(和 HTML)會把連續的空格合併成一個。如果你需要保留多個空格,有幾種方法:
- 用
(不斷行空格)替代普通空格 - 用全形空格(中文輸入法下的空格)
- 放在行內程式碼裡
`多個 空格`
數學公式裡的符號衝突怎麼辦?
如果你的平台支援 LaTeX 數學公式($...$),在寫價格、範圍等包含 $ 的內容時要特別小心。$5-$10 這種寫法在支援數學公式的平台上會被錯誤解析。解決方案:
- 用反斜線轉義:
\$5-\$10 - 放在行內程式碼裡:
`$5 - $10` - 用 HTML 實體:
$5 - $10
參考來源
- CommonMark Spec — Markdown 標準規範,定義了完整的轉義字元列表和解析規則
- GitHub Flavored Markdown Spec — GitHub 對 CommonMark 的擴展規範,包括刪除線、表格等
- Markdown Guide - Basic Syntax — Markdown 基礎語法參考,包含轉義字元說明
- Markdown Guide - Cheat Sheet — Markdown 語法速查表
- HTML Entities Reference (MDN) — HTML 實體符號完整參考