การแปลง HTML เป็น Markdown คืออะไร?การแปลง HTML เป็น Markdown คือกระบวนการเปลี่ยน HTML markup ให้เป็น Markdown ซึ่งเป็นรูปแบบการจัดรูปแบบข้อความธรรมดาที่มีน้ำหนักเบา สร้างขึ้นโดย John Gruber ในปี 2004 Markdown ได้รับการออกแบบให้อ่านได้โดยไม่ต้องผ่านการเรนเดอร์ ในขณะที่ HTML ต้องใช้แท็กเปิดและปิด เช่น <strong> และ <a href=""> Markdown ใช้อักขระย่อ เช่น **ตัวหนา** [ลิงก์](url) และ # หัวข้อ การแปลง HTML เป็น Markdown ได้ไฟล์ที่อ่านง่าย แก้ไขง่าย และจัดการกับ version control ได้สะดวกกว่า HTML แบบดิบ
กระบวนการแปลงจะจับคู่องค์ประกอบ HTML กับรูปแบบ Markdown ที่สอดคล้องกัน เช่น <h2> กลายเป็น ## ส่วน <ul><li> กลายเป็น - รายการ และแท็ก <a> กลายเป็น [ข้อความ](url) องค์ประกอบ HTML บางส่วนไม่มีรูปแบบ Markdown ที่ตรงกัน เช่น <div>, <span> หรือ data attribute แบบกำหนดเอง โปรแกรมแปลงมักจะตัดแท็กเหล่านี้ออกหรือส่งผ่านเป็น HTML ดิบ ขึ้นอยู่กับการตั้งค่า
Markdown ได้กลายเป็นรูปแบบการเขียนมาตรฐานสำหรับเอกสารนักพัฒนา (GitHub, GitLab, Bitbucket), static site generator (Hugo, Jekyll, Astro), แอปจดบันทึก (Obsidian, Notion) และบล็อกเทคนิค การแปลงเนื้อหา HTML ที่มีอยู่เป็น Markdown เป็นขั้นตอนทั่วไปเมื่อย้ายเว็บไซต์ นำเข้าเนื้อหาจาก CMS หรือเก็บถาวรหน้าเว็บในรูปแบบพกพาได้ ต่างจาก HTML ตรงที่ไฟล์ Markdown สร้าง diff ที่สะอาดใน version control ทำให้การ code review การเปลี่ยนแปลงเอกสารเป็นเรื่องที่ทำได้จริง
ทำไมต้องใช้เครื่องมือแปลง HTML เป็น Markdown?การเขียน HTML ใหม่เป็น Markdown ด้วยมือนั้นช้าและเกิดข้อผิดพลาดได้ง่าย โดยเฉพาะสำหรับหน้าที่มีรายการซ้อนกัน ตาราง หรือลิงก์จำนวนมาก เครื่องมือแปลงอัตโนมัติจัดการการแมปโครงสร้างได้ทันทีและสม่ำเสมอ
⚡ แปลงได้ทันทีในเบราว์เซอร์
วาง HTML แล้วรับผลลัพธ์ Markdown ในไม่กี่มิลลิวินาที ไม่ต้องส่งข้อมูลไปยังเซิร์ฟเวอร์ ไม่ต้องรอคิวประมวลผล การแปลงทำงานทั้งหมดในเบราว์เซอร์ของคุณโดยใช้ JavaScript
🔒 รักษาความเป็นส่วนตัวของข้อมูล
HTML ของคุณไม่เคยออกจากเครื่องของคุณ การประมวลผลทั้งหมดเกิดขึ้นฝั่งไคลเอนต์ จึงไม่มีการอัปโหลด ไม่มีการบันทึก log และไม่มีบุคคลที่สามเข้าถึงเนื้อหาของคุณ
📝 รักษาโครงสร้างเอกสาร
หัวข้อ รายการ ลิงก์ รูปภาพ บล็อกโค้ด และตารางถูกแมปไปยังรูปแบบ Markdown ที่ถูกต้อง โครงสร้างซ้อนกันและการจัดรูปแบบแบบ inline ถูกจัดการแบบ recursive
🔀 ไม่ต้องมีบัญชีหรือติดตั้ง
เปิดเครื่องมือแล้วเริ่มแปลงได้เลย ไม่มีอะไรต้องติดตั้ง ไม่ต้องตั้งค่า API key และไม่ต้องกรอกแบบฟอร์มสมัคร ใช้งานได้บนอุปกรณ์ใดก็ตามที่มีเบราว์เซอร์รุ่นใหม่
กรณีการใช้งานการแปลง HTML เป็น Markdownนักพัฒนา Frontend: การย้าย CMS
ส่งออกบทความหรือหน้าเพจจาก WordPress, Drupal หรือ headless CMS เป็น HTML แล้วแปลงเป็น Markdown เพื่อใช้กับ static site generator เช่น Next.js, Astro หรือ Hugo
วิศวกร Backend: เอกสาร API
แปลงเอกสาร API HTML ที่สร้างอัตโนมัติเป็นไฟล์ Markdown ที่อยู่คู่กับซอร์สโค้ด เอกสาร Markdown รวมกับการเรนเดอร์ของ GitHub และสามารถ version ร่วมกับโค้ดที่อธิบายได้
DevOps: การแปลง Runbook
แปลงหน้าวิกิภายใน (Confluence, SharePoint) ที่ส่งออกเป็น HTML เป็น Markdown runbook ที่เก็บใน Git repository คู่กับโค้ด infrastructure ที่อธิบาย
วิศวกร QA: เอกสาร Test Case
แปลงรายงาน HTML หรือแผนทดสอบแบบ manual จากเครื่องมือบนเว็บเป็นไฟล์ Markdown ที่สามารถ review ใน pull request คู่กับการเปลี่ยนแปลงโค้ดที่ตรวจสอบ
วิศวกรข้อมูล: ทำความสะอาดข้อมูล Web Scraping
ตัดส่วน HTML boilerplate จากหน้าเว็บที่ scrape มาและสร้างข้อความ Markdown ที่สะอาด ซึ่งจะลบ navigation โฆษณา และ markup การจัดวางออก พร้อมรักษาเนื้อหาและโครงสร้างบทความไว้
นักศึกษา: บันทึกงานวิจัย
คัดลอกเนื้อหาจากแหล่งข้อมูลบนเว็บแล้วแปลง HTML เป็น Markdown เพื่อนำเข้า Obsidian, Notion หรือระบบจดบันทึกที่ใช้ Markdown รักษาหัวข้อ ลิงก์ และการจัดรูปแบบไว้
ตารางอ้างอิงองค์ประกอบ HTML เป็น Markdownตารางด้านล่างแสดงการแมปองค์ประกอบ HTML ทั่วไปไปยังรูปแบบ Markdown ที่สอดคล้องกัน การแมปนี้ใช้ข้อกำหนด GitHub-Flavored Markdown (GFM) ซึ่งขยาย CommonMark spec ด้วยตาราง strikethrough และ task list องค์ประกอบที่ไม่ได้แสดงในที่นี้ (เช่น <div>, <form> หรือ web component แบบกำหนดเอง) ไม่มีรูปแบบ Markdown เทียบเท่าและจะถูกตัดออกหรือส่งผ่านเป็น HTML ดิบ
องค์ประกอบ HTML รูปแบบ Markdown หมายเหตุ <h1>...<h6> # ... ###### ATX headings, level matches tag number <p> Blank line separation Double newline between paragraphs <strong>, <b> **text** Bold / strong emphasis <em>, <i> *text* Italic / emphasis <a href="url"> [text](url) Inline link with optional title <img src="url">  Image with alt text <ul><li> - item Unordered list with dash or asterisk <ol><li> 1. item Ordered list, numbers restart per block <blockquote> > text Block quote, nestable with >> <code> `code` Inline code span <pre><code> ```lang\ncode\n``` Fenced code block with optional language <hr> --- Horizontal rule (three dashes) <table> | col | col | GFM table syntax with alignment <del>, <s> ~~text~~ Strikethrough (GFM extension)
รูปแบบ Markdown: GFM vs CommonMark vs ต้นฉบับMarkdown ไม่ได้มีรูปแบบเดียว รูปแบบเอาต์พุตมีความสำคัญเพราะแพลตฟอร์มต่างกันแยกวิเคราะห์ Markdown ต่างกัน รูปแบบที่พบบ่อยที่สุดสามแบบคือ GitHub-Flavored Markdown (GFM), CommonMark และ Markdown ต้นฉบับของ Gruber
GitHub-Flavored Markdown (GFM)
รูปแบบที่ใช้กันแพร่หลายที่สุด เพิ่มตาราง (รูปแบบ pipe), strikethrough (~~ข้อความ~~), task list (- [x]) และ URL ที่เชื่อมโยงอัตโนมัติ ใช้โดย GitHub, GitLab และเครื่องมือนักพัฒนาส่วนใหญ่ เครื่องมือแปลงนี้ส่งออก Markdown ที่เข้ากันได้กับ GFM โดยค่าเริ่มต้น
CommonMark
ข้อกำหนดที่เข้มงวดซึ่งแก้ไขความคลุมเครือใน Markdown รูปแบบดั้งเดิม กำหนดกฎที่แน่นอนสำหรับการต่อรายการ การแยกวิเคราะห์ emphasis และการซ้อน block ใช้เป็นฐานสำหรับ GFM และ static site generator หลายตัว
Markdown ต้นฉบับ
ข้อกำหนดปี 2004 ของ John Gruber ไม่รองรับตาราง fenced code block หรือ strikethrough เครื่องมือส่วนใหญ่ในปัจจุบันถือว่าเป็นชุดย่อยของ CommonMark แทบไม่ถูกใช้เป็นรูปแบบเป้าหมายในปัจจุบัน
ตัวอย่างโค้ดตัวอย่างการทำงานใน JavaScript (Turndown), Python (markdownify และ html2text), Go และ Pandoc บน command line
JavaScript (Turndown) Copy
import TurndownService from 'turndown'
const turndown = new TurndownService({ headingStyle: 'atx' })
const html = '<h1>Title</h1><p>A <strong>bold</strong> paragraph.</p>'
const md = turndown.turndown(html)
console.log(md)
// → "# Title\n\nA **bold** paragraph." Python (markdownify) Copy
from markdownify import markdownify
html = '<h2>Section</h2><ul><li>First</li><li>Second</li></ul>'
md = markdownify(html, heading_style='ATX')
print(md)
# → "## Section\n\n- First\n- Second" Python (html2text) Copy
import html2text
converter = html2text.HTML2Text()
converter.body_width = 0 # disable line wrapping
html = '<p>Visit <a href="https://example.com">Example</a> for details.</p>'
md = converter.handle(html)
print(md)
# → "Visit [Example](https://example.com) for details." Go (html-to-markdown) Copy
package main
import (
"fmt"
md "github.com/JohannesKaufmann/html-to-markdown"
)
func main() {
converter := md.NewConverter("", true, nil)
html := `<h3>Go Example</h3><p>Code: <code>fmt.Println()</code></p>`
markdown, _ := converter.ConvertString(html)
fmt.Println(markdown)
// → "### Go Example\n\nCode: `fmt.Println()`"
} CLI (Pandoc) Copy
# Convert an HTML file to Markdown
pandoc input.html -f html -t markdown -o output.md
# Pipe HTML from stdin
echo '<p>Hello <em>world</em></p>' | pandoc -f html -t markdown
# → Hello *world*
# Use GitHub-Flavored Markdown output
pandoc input.html -f html -t gfm -o output.md คำถามที่พบบ่อยองค์ประกอบ HTML ใดบ้างที่ไม่สามารถแปลงเป็น Markdown ได้?
Markdown ไม่มีรูปแบบเทียบเท่าสำหรับ <div>, <span>, <form>, <input>, <iframe> หรือองค์ประกอบใดที่มี CSS class และ style แบบกำหนดเอง โปรแกรมแปลงส่วนใหญ่จะตัดแท็กเหล่านี้ออกและเก็บเฉพาะข้อความภายใน โปรแกรมแปลงบางตัวสามารถส่งผ่าน HTML ที่ไม่รองรับโดยไม่เปลี่ยนแปลง ซึ่งถูกต้องเนื่องจากข้อกำหนด Markdown อนุญาต HTML แบบ inline อย่างชัดเจน หากต้องการรักษาองค์ประกอบเหล่านั้น ให้ตั้งค่าโปรแกรมแปลงให้เก็บ HTML ดิบแทนการตัดออก
ตาราง HTML ถูกแปลงเป็น Markdown อย่างไร?
ตาราง HTML แมปไปยังรูปแบบ GFM pipe-table: | ส่วนหัว | ส่วนหัว | พร้อมแถวตัวคั่น | --- | --- | ตาราง GFM ไม่รองรับ colspan, rowspan หรือการจัดรูปแบบระดับเซลล์ ตารางซับซ้อนที่มีเซลล์ที่ผสานจะถูกแบนราบ ซึ่งอาจสูญเสียข้อมูลโครงสร้าง สำหรับตารางข้อมูลแบบง่าย การแปลงจะไม่สูญเสียข้อมูล
การแปลงจาก HTML เป็น Markdown ไม่สูญเสียข้อมูลหรือ?
ไม่ใช่ Markdown เป็นชุดย่อยของ HTML ดังนั้นข้อมูลบางส่วนจะสูญหายเสมอระหว่างการแปลง CSS class, inline style, data attribute, องค์ประกอบฟอร์ม และแท็ก semantic เช่น <article> หรือ <section> ไม่มีรูปแบบ Markdown เทียบเท่า เนื้อหาข้อความและโครงสร้างพื้นฐาน (หัวข้อ รายการ ลิงก์ emphasis) จะถูกรักษาไว้อย่างแม่นยำ สำหรับ workflow การย้ายเอกสารและเนื้อหาส่วนใหญ่ องค์ประกอบที่รักษาไว้คือสิ่งที่สำคัญ
ความแตกต่างระหว่างการแปลง HTML เป็น Markdown และ HTML เป็นข้อความธรรมดาคืออะไร?
การแปลง HTML เป็นข้อความธรรมดาจะตัดการจัดรูปแบบทั้งหมดออกและสร้างข้อความดิบที่ไม่มีโครงสร้าง การแปลง HTML เป็น Markdown รักษาโครงสร้างเอกสาร: หัวข้อยังคงเป็นหัวข้อ ลิงก์รักษา URL ไว้ รายการยังคงเป็นรายการ และ emphasis ได้รับการรักษาไว้ เอาต์พุต Markdown สามารถเรนเดอร์กลับเป็น HTML ด้วยโครงสร้างเชิงตรรกะเดียวกัน
ฉันสามารถแปลง Markdown กลับเป็น HTML ได้ไหม?
ได้ Markdown processor ทุกตัว (marked, markdown-it, Python-Markdown, goldmark) แปลง Markdown เป็น HTML การ round-trip นี้เป็นเหตุผลหนึ่งที่ Markdown เป็นที่นิยม: คุณเขียนในรูปแบบที่อ่านได้และเรนเดอร์เป็น HTML สำหรับเว็บ การ round-trip ไม่สมมาตรอย่างสมบูรณ์แบบ เพราะการแปลง HTML เป็น Markdown จะตัดองค์ประกอบที่ไม่รองรับออก
เครื่องมือแปลงจัดการ HTML ที่มี CSS แบบ inline หรือ JavaScript อย่างไร?
CSS แบบ inline (style attribute) และบล็อก <style> จะถูกตัดออกระหว่างการแปลง เนื่องจาก Markdown ไม่มีรูปแบบการจัดรูปแบบ JavaScript (แท็ก <script> และ event handler เช่น onclick) ก็จะถูกลบออกด้วย เครื่องมือแปลงดึงเฉพาะเนื้อหาและโครงสร้างเอกสาร ทำให้การแปลง HTML เป็น Markdown เป็นขั้นตอน sanitization ที่มีประโยชน์เมื่อนำเข้าเนื้อหา HTML ที่ไม่น่าเชื่อถือลงในเอกสารของคุณ
ฉันควรใช้รูปแบบ Markdown ใดสำหรับโครงการของฉัน?
ใช้ GitHub-Flavored Markdown (GFM) หากเนื้อหาของคุณจะถูกดูบน GitHub, GitLab หรือแพลตฟอร์มเอกสารส่วนใหญ่ ใช้ CommonMark หากคุณต้องการความสอดคล้องกับ spec ที่เข้มงวดและการแยกวิเคราะห์ที่คาดเดาได้ในตัวเรนเดอร์ต่างกัน Markdown ต้นฉบับมีความเกี่ยวข้องเฉพาะกับระบบเก่าเท่านั้น GFM เป็นค่าเริ่มต้นที่ปลอดภัยที่สุดสำหรับโครงการส่วนใหญ่