เอกสาร Markdown (.md)
CommonMark มาตรฐานMarkdown (MD) คือภาษามาร์กอัปแบบน้ำหนักเบาที่ได้รับความนิยมมากที่สุดในโลก ออกแบบโดย John Gruber ให้อ่านและเขียนเป็นข้อความธรรมดาได้ง่าย พร้อมแปลงเป็น HTML ที่มีโครงสร้างได้อย่างเรียบร้อย
ตรวจสอบไฟล์และข้อมูลเมตา
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ Markdown โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็นส่วนหัวระดับไบต์
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ Markdown โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็น HEX (OFFSET 0):
ไม่มีลายเซ็นตายตัวการแสดงผลรูปแบบ ASCII: ไม่มีลายเซ็น ASCII ตายตัว
มาตรฐาน: CommonMark Specification / GitHub Flavored Markdown (GFM)
ข้อมูลจำเพาะทางเทคนิค
| สถาปัตยกรรมคอนเทนเนอร์ | ไฟล์ข้อความ UTF-8 ล้วนที่ใช้เครื่องหมายวรรคตอนอย่างง่ายเพื่อจัดรูปแบบ (หัวข้อ, รายการ, ตัวหนา, ตัวเอียง, บล็อกโค้ด) |
| การบีบอัด | ข้อความแบบไม่บีบอัด (บีบอัดได้ง่ายด้วย Gzip หรือ Brotli) |
| การจัดลำดับไบต์ | สตรีมข้อความ UTF-8 / Unicode |
| พื้นที่สี | ไม่เกี่ยวข้อง (มาร์กอัปข้อความล้วน) |
| ช่องสัญญาณและโครงสร้าง | หัวข้อ, ข้อความอ้างอิงแบบบล็อก, รายการแบบไม่มีลำดับ/มีลำดับ, กรอบโค้ด, ไฮเปอร์ลิงก์, ภาพ และตาราง |
| ขนาดสูงสุด | ความยาวเอกสารข้อความไม่จำกัด |
| ความโปร่งใส | ไม่มี (ข้อความล้วน) |
| การสตรีมและแบบโปรเกรสซีฟ | แยกข้อความเป็นโทเค็นแบบบล็อกและแบบอินไลน์ผ่านสตรีมทีละบรรทัด |
ตารางเปรียบเทียบทางเทคนิค: Markdown กับคู่แข่ง
| คุณลักษณะทางเทคนิค | Markdown (ปัจจุบัน) | HTML | TXT | |
|---|---|---|---|---|
| ความง่ายในการเขียน | พิมพ์ข้อความธรรมดาได้เร็วมาก | ไวยากรณ์แท็กที่ยืดยาว (<p>, <div>) | พิมพ์เร็ว (ไม่มีการจัดรูปแบบ) | ต้องใช้โปรแกรมแก้ไขเลย์เอาต์แบบกราฟิก |
| ความสามารถในการอ่านโดยมนุษย์ (แบบดิบ) | อ่านข้อความดิบได้เป็นธรรมชาติและชัดเจน | รกด้วยแท็กและวงเล็บ | อ่านข้อความดิบได้ชัดเจน | ไบต์ดิบแบบไบนารีที่อ่านไม่ออก |
| การแปลงเป็น HTML | ผลลัพธ์ที่กำหนดแน่นอนและตรงกันแบบ 1:1 | ภาษาเว็บดั้งเดิม | ต้องจัดรูปแบบด้วยตนเอง | ผลลัพธ์กราฟิกแบบตายตัว |
| เครื่องมือนักพัฒนา | การรองรับแตกต่างกันไปตามซอฟต์แวร์ | การรองรับแตกต่างกันไปตามซอฟต์แวร์ | การรองรับแตกต่างกันไปตามซอฟต์แวร์ | การแจกจ่ายเอกสาร |
รูปแบบความเสียหายทั่วไปและคู่มือการกู้คืน Hex
บล็อกโค้ดแสดงผลเป็นย่อหน้าปกติ หรือหัวข้อไม่สามารถจัดรูปแบบได้
สาเหตุหลัก: เว้นวรรคหลังสัญลักษณ์หัวข้อ '#' ไม่ถูกต้อง หรือลืมปิดเครื่องหมายแบ็กทิกสามตัว (```) ของบล็อกโค้ด
การกู้คืน: ตรวจสอบความถูกต้องและจัดรูปแบบไวยากรณ์ Markdown ใหม่โดยใช้ File2File.app Markdown Linter
การวิเคราะห์ความปลอดภัยและเวกเตอร์การโจมตีตัวแยกวิเคราะห์
ตัวแปลง Markdown มักอนุญาตให้ใช้ HTML แบบอินไลน์ดิบได้โดยค่าเริ่มต้น ซึ่งอาจนำไปสู่ช่องโหว่ Cross-Site Scripting (XSS) หากไม่ผ่านการทำความสะอาดข้อมูล
เวกเตอร์การโจมตีที่ทราบ
- การฉีดสคริปต์ XSS ผ่านองค์ประกอบ HTML โดยตรง (เช่น '<script>' หรือ '<img onerror=...>') ที่ฝังอยู่ภายในข้อความ Markdown
- การปฏิเสธการให้บริการ (Denial of Service) ผ่านโครงสร้างบล็อกอ้างอิงหรือรายการที่ซ้อนกันลึกเกินไปในตัวแยกวิเคราะห์ที่ไม่เป็นไปตามมาตรฐาน
- ชุดรูปแบบไฮเปอร์ลิงก์อันตราย ('javascript:') ภายในไวยากรณ์ลิงก์ของ Markdown
แนวทางปฏิบัติที่ดีที่สุดในการป้องกัน: ทำความสะอาดเอาต์พุต HTML ที่สร้างขึ้นด้วย DOMPurify เสมอและไม่อนุญาตโปรโตคอล URL ที่ไม่ปลอดภัย
ประวัติความเป็นมาและเหตุการณ์สำคัญ
ข้อได้เปรียบและจุดเด่นสำคัญ
- มนุษย์อ่านง่ายสูงสุด: ข้อความที่จัดรูปแบบจะดูสะอาดและเป็นธรรมชาติแม้จะดูในเทอร์มินัลพื้นฐานหรือโปรแกรมแก้ไขข้อความธรรมดา
- Markdown ใช้กันมากในเอกสารประกอบ แต่รูปแบบไวยากรณ์และการแสดงผลแตกต่างกันไปตามเครื่องมือ
- ไม่มีการผูกขาดกับผู้ให้บริการรายใด: ไฟล์ข้อความธรรมดาจะยังคงสามารถอ่านได้นานนับศตวรรษโดยไม่ต้องอาศัยซอฟต์แวร์แสดงผลเฉพาะกรรมสิทธิ์
ข้อจำกัดทางเทคนิคและข้อควรพิจารณา
- ข้อกำหนดฉบับดั้งเดิมปี 2004 มีกฎการแยกวิเคราะห์ที่กำกวม จนนำไปสู่การแตกแขนงของรูปแบบย่อยที่แตกต่างกัน (CommonMark, GFM และ Kramdown)
- ไม่มีการรองรับฟีเจอร์การจัดหน้าเอกสารที่ซับซ้อนโดยตรง เช่น หน้านิตยสารหลายคอลัมน์ การตัดข้อความโอบรอบวัตถุ หรือหมายเลขหน้า
- รูปภาพที่ฝังอยู่จะใช้วิธีลิงก์จากภายนอกแทนที่จะถูกจัดเก็บไว้ภายในไฟล์เอกสาร
เกร็ดความรู้ทางเทคนิคที่น่าสนใจ
- Aaron Swartz ผู้ร่วมพัฒนา Markdown กับ John Gruber ตอนอายุ 17 ปี ยังเป็นผู้ร่วมก่อตั้ง Reddit และสร้าง RSS 1.0 อีกด้วย
- ที่เก็บโค้ด GitHub ทุกแห่งในโลกต่างใช้ไฟล์ 'README.md' เพื่อแนะนำชุดโค้ดของตนเองให้กับนักพัฒนา
- ปรัชญาการออกแบบ Markdown ระบุไว้ว่า: 'เป้าหมายการออกแบบหลักสำหรับไวยากรณ์การจัดรูปแบบของ Markdown คือการทำให้อ่านง่ายที่สุดเท่าที่จะเป็นไปได้'
คำถามทางเทคนิคที่พบบ่อย
Markdown ใช้สำหรับทำอะไร?
Markdown ใช้เขียนเอกสารและไฟล์ README บน GitHub เขียนบล็อกโพสต์ จดบันทึกในแอปอย่าง Obsidian และ Notion รวมถึงเขียนข้อความบนแพลตฟอร์มอย่าง Discord และ Slack
ฉันสามารถแปลง Markdown เป็น PDF หรือ HTML ได้อย่างไร?
คุณสามารถแปลงไฟล์ Markdown (.md) เป็นเอกสาร PDF ที่จัดรูปแบบแล้วหรือโค้ด HTML ที่สะอาดตาได้ด้วยคลิกเดียวโดยใช้ File2File.app บนเว็บเบราว์เซอร์ของคุณโดยตรง
GitHub Flavored Markdown (GFM) คืออะไร?
GFM คือเวอร์ชันขยายของ Markdown จาก GitHub ซึ่งเพิ่มการรองรับตาราง, รายการงานที่มีช่องทำเครื่องหมาย ([x]), ข้อความขีดฆ่า (~~text~~) และบล็อกโค้ดที่ไฮไลต์ไวยากรณ์