什麼是 HTML 轉 Markdown?
HTML 是瀏覽器顯示的已渲染標記 — <h1>、<ul>、<table>、<a> 等等。Markdown 是一種輕量級純文字格式,使用最少的標點(# 表示標題、* 表示強調、- 表示清單項目)來編碼同樣的結構。GitHub Flavored Markdown(GFM)在原始 CommonMark 規格上擴充了表格、刪除線、任務清單與自動連結。將 HTML 轉為 Markdown,把已渲染或匯出的 HTML 拉回可編輯的純文字 Markdown — 正是 CMS 內容遷移或 README 整理所需要的。
輸出支援哪些 GitHub Flavored Markdown 功能?
內建的 turndown@7.2.0 引擎配合 turndown-plugin-gfm 擴充,從您的 HTML 輸出完整 GFM 超集:從 <h1>–<h6> 產生 # 至 ###### 的 ATX 風格標題、可巢狀的有序與無序清單、粗體 **text** 與斜體 *text*、從 <del> 產生刪除線 ~~text~~、行內連結 [text](url) 與行內圖片 、附語言提示的圍欄程式碼區塊(```js)、行內程式碼 `code`、從 <table> 產生管道表格、從 checkbox 輸入產生 GFM 任務清單 - [ ] / - [x]、引用區塊 > 以及水平分隔線 ---。預覽面板以 marked@12.0.2 重新渲染輸出的 Markdown,讓您直觀地確認轉換結果。
HTML 轉 Markdown 是如何運作的?
每一次轉換都在你的瀏覽器中使用三個內建函式庫本機執行 — 無 CDN、無 fetch、無遙測。主要步驟如下:
- 淨化:貼上的 HTML 首先經過
DOMPurify.sanitize(html, { USE_PROFILES: { html: true } }),在任何遍歷發生之前移除<script>元素、所有on*事件處理屬性以及javascript:URI。DOMPurify 是 Mozilla MDN、Atlassian、Microsoft 365 同款的 XSS 淨化器。 - 轉換:
turndownService.turndown遍歷清理後的 DOM,輸出 GitHub Flavored Markdown — 標題變為#前綴,清單變為-/1.項目,<table>變為管道表格,以此類推。Markdown 透過value寫入只讀輸出<textarea>(而非innerHTML),因此本質上是安全的。 - 渲染:輸出的 Markdown 由
marked.parse再次解析,再次經過DOMPurify淨化,並賦給預覽面板的innerHTML,讓您得到視覺確認 — Markdown 往返回預期結構。即時模式會對輸入做 150 ms 去抖動,讓預覽在貼入時持續更新而不會壓垮解析器。
為什麼使用此工具將 HTML 轉為 Markdown?
- 隱私:每次淨化、轉換與渲染都在你的瀏覽器中完成。HTML — 包括匯出的 CMS 文章、內部文件和機密頁面源碼 — 永遠不會傳到我們的伺服器。
- 預設 XSS 安全:貼上的 HTML 在 turndown 遍歷之前先經過 DOMPurify,預覽面板在
innerHTML之前再次把重新渲染的 HTML 經過 DOMPurify,因此貼上含<script>標籤或onerror=處理器的標記也只會產出一段不動作的預覽和乾淨的 Markdown。 - 完整 GFM:
<table>元素轉為 Markdown 管道表格,<del>轉為刪除線,checkbox 清單轉為 GFM 任務清單。多數線上轉換器在 HTML → Markdown 路徑上會丟失表格 — 內建的turndown-plugin-gfm擴充會保留它們。
HTML 轉 Markdown 的常見應用情境有哪些?
將 HTML 轉為 Markdown 廣泛出現在內容遷移、文件撰寫和歸檔中:
- CMS 遷移:把 WordPress 或 Ghost 的文章匯出成 HTML 後轉為 Markdown,用於 Hugo / Jekyll / 11ty / Astro 靜態網站重建。轉換會保留標題層級、連結、清單與行內強調。
- README 整理:貼上 wiki 頁面或網路文章的已渲染 HTML,將其拉回可編輯的 Markdown,用於專案 README 或文件站點 — 而非重新手動輸入結構。
- 歸檔與筆記:擷取 HTML 郵件或網頁剪輯,轉為 Markdown 存入 Obsidian、Notion 或純文字知識庫 — Markdown 保持 diff 友好,並能經受格式變遷。
HTML 轉 Markdown 的範例是什麼樣的?
貼上 <h2>Heading</h2><ul><li>a</li><li>b<ul><li>nested</li></ul></li></ul> 會生成帶 ## Heading 的 Markdown、一個巢狀項目符號清單,以及能重新渲染回同樣巢狀結構的預覽。貼上附表頭列和兩行資料的 <table> 會生成對應的 | col | col | 管道表格 — 確認轉換能保留標題、清單和表格。
這個 HTML 轉 Markdown 轉換器完全在我的瀏覽器中執行嗎?
是的。每一次淨化、轉換與渲染都會以 JavaScript 在你的瀏覽器分頁本機執行。三個內建函式庫 — turndown@7.2.0(含 turndown-plugin-gfm@1.0.2)、marked@12.0.2 與 DOMPurify@3.1.7 — 與頁面同源載入,因此沒有 CDN 依賴、沒有 fetch、沒有 XMLHttpRequest,也不會用 navigator.sendBeacon 回報輸入。頁面一旦載入完畢即可離線使用。匯出的文章、內部文件與機密頁面源碼都留在你的裝置上。
渲染預覽面板是 XSS 安全的嗎?
是的。每一段指派給 innerHTML 的 HTML 字串都會先經過 DOMPurify.sanitize(html, { USE_PROFILES: { html: true } })。DOMPurify 是由 Cure53 維護的開源 XSS 淨化器,也是 Mozilla MDN、Atlassian、Microsoft 365 用來加固使用者提供 HTML 的同款函式庫。預設 html 設定會移除 <script> 元素、所有 on* 事件處理屬性(onerror、onclick 等)、href / src 中的 javascript: URI 協定。貼上 <img src=x onerror=alert(1)> 會得到一個預覽,其中 document.querySelector('#output-preview img[onerror]') 回傳 null,且不會跳出任何警示。
GFM 表格能從 HTML 轉換嗎?
支援。HTML → Markdown 方向使用 turndown-plugin-gfm,該外掛新增了一條自訂 turndown 規則,能走訪 <table> 節點並輸出對應的管道表格 Markdown — 一列表頭、一列 |---|---| 對齊列,再加資料列。多數線上轉換器在這條路徑上會丟失表格;本工具保留它們。刪除線(<del>text</del> → ~~text~~)與任務清單(<input type="checkbox"> → - [ ] / - [x])以相同方式轉換。
我的 HTML 能乾淨地轉換嗎?
對標準 GFM 功能集 — 從 h1 到 h6 的標題、可巢狀的有序與無序清單、粗體/斜體/刪除線、行內連結、行內圖片、含語言標籤的圍欄程式碼區塊、行內程式碼、管道表格、任務清單、引用區塊、水平分隔線與自動連結 — 轉換是乾淨且可預期的。邊緣情況:HTML 注解(<!-- ... -->)會被剝離(Markdown 沒有注解語法);行內樣式與 class 屬性會被丟棄,因為 Markdown 沒有對應概念;不常見的行內標籤如 <sub> / <sup> 會轉為純文字。這些是 turndown 的既定行為,並非 bug。
圍欄程式碼區塊支援語法醒目提示嗎?
v1 中不支援。圍欄程式碼區塊以等寬字型與淡淡背景渲染,但沒有依語言的詞法上色。引入語法醒目提示需要打包 Prism 或 highlight.js,每個都會多增 15–40 KB,再加上每種語言的語法檔,以及需要與 Workshop Terminal 配色對齊的主題矩陣。目前渲染器把重點放在正確性與 XSS 安全上;若使用者對行內醒目提示有需求,做成可選開關是個可行的後續改進。
本 HTML 轉 Markdown 轉換器內建 turndown@7.2.0(+ turndown-plugin-gfm@1.0.2)、marked@12.0.2 與 DOMPurify@3.1.7,與頁面同源載入,輸出完整 GFM 功能集,並在每段渲染後的 HTML 字串接觸 DOM 前進行淨化。無上傳、無 CDN、無遙測 — 每一個位元都留在你的瀏覽器中。