EST. 2026 — บันทึกงานเซิร์ฟเวอร์จริง SYSADMIN · SECURITY · AI · DIRECTADMIN เล่มที่ 01
THE SYSADMIN ALMANAC
หน้าหลัก / Linux / ~30 วินาที กลายเป็นตัวห้อยจิ๋ว — กับดัก Litedown ของ Flarum ที่คนไทยเจอบ่อย
Linux

~30 วินาที กลายเป็นตัวห้อยจิ๋ว — กับดัก Litedown ของ Flarum ที่คนไทยเจอบ่อย

โดย Ton-Or ·18 ก.ค. 2026·อ่าน 6 นาที
~30 วินาที กลายเป็นตัวห้อยจิ๋ว — กับดัก Litedown ของ Flarum ที่คนไทยเจอบ่อย

Flarum ไม่ได้ใช้ CommonMark ตรง ๆ แต่ใช้ Litedown ที่มีไวยากรณ์ต่างกันบางจุด — จุดที่กัดคนไทยที่สุดคือ ~ ซึ่งเราชอบใช้แทน "ประมาณ" แต่ Litedown อ่านเป็นตัวเปิด subscript

พอดีผมดูแลบอร์ด Flarum แล้วเจอปัญหาที่คนโพสต์บ่นซ้ำ ๆ — พิมพ์ว่า "รอ ~30 วินาที" แล้วเลข 30 มันกลายเป็นตัวห้อยจิ๋ว ๆ ลอยอยู่ท้ายบรรทัดแทนที่จะเป็นข้อความปกติ ตอนแรกนึกว่า theme เพี้ยน จริง ๆ แล้วเป็นเรื่องไวยากรณ์ของตัว markdown ที่ Flarum ใช้ ซึ่งคนไทยเจอกันบ่อยเพราะนิสัยการพิมพ์ เลยเอามาเล่าไว้

Flarum ไม่ได้ใช้ CommonMark

Flarum เรนเดอร์ด้วย Litedown (ตระกูล s9e/TextFormatter) ไม่ใช่ CommonMark ที่คนคุ้น หน้าตาคล้ายกันแต่มีจุดต่าง จุดที่กัดหนักสุดคือ ~

~ = ตัวเปิด subscript ใน Litedown

พิมพ์ ~30 Litedown อ่านว่าเปิด subscript แล้วปิดเองโดยปริยาย — เลข 30 เลยกลายเป็นตัวห้อย คนไทยชอบใช้ ~ แทน "ประมาณ" (ราว ~30 วิ, ~5 GB) เลยเจอกันประจำ

สิ่งที่เกิดขึ้นพิมพ์ ~30 วินาทีตั้งใจว่า "ประมาณ"→Litedown~ = เปิด SUB→30 เป็นตัวห้อยลอยจิ๋วท้ายบรรทัด

วิธีเลี่ยงตอนพิมพ์

ง่ายสุดคือเลี่ยงเครื่องหมาย ~ ไปเลยเวลาสื่อความว่า "ประมาณ":

  • ใช้คำไทยตรง ๆ: "ราว 30 วินาที", "ประมาณ 5 GB"
  • ใช้สัญลักษณ์อื่น: ≈ 30
  • ถ้าจำเป็นต้องมี ~ จริง ๆ ครอบด้วย inline code: `~30` จะแสดงเป็น ~30 ตามตัว
^ ก็มีความหมายพิเศษ

เช่นเดียวกัน ^ ใน Litedown = superscript ถ้าจะพิมพ์ x^2 แบบตัวยกได้ แต่ถ้าไม่ตั้งใจก็ครอบ inline code เหมือนกัน

แก้ของเก่าผ่าน DB — ต้องรู้ว่ามันเก็บเป็น s9e XML

ถ้าจะแก้โพสต์เก่าจำนวนมากผ่านฐานข้อมูลตรง ๆ มีกับดักสำคัญ: Flarum ไม่ได้เก็บ markdown ดิบใน posts.content แต่เก็บเป็น s9e XML ที่ parse แล้ว

# ดูของจริงในคอลัมน์ content — จะเห็นเป็น XML ไม่ใช่ ~30
# <r><SUB>...</SUB></r> ประมาณนี้ ไม่ใช่ข้อความดิบ

การ REPLACE ตรง ๆ ต้องเขียนให้รู้จักโครงสร้าง XML ไม่ใช่ค้นหา "~30" เพราะในฐานข้อมูลมันไม่ได้หน้าตาแบบนั้นแล้ว — แก้เสร็จอย่าลืม clear cache ให้ re-render

พิมพ์ ~30 วินาทีข้อความดิบของผู้ใช้Litedown แปลงตอนบันทึกโพสต์posts.contentเป็น s9e XMLแสดงผลหน้าเว็บเลข 30 เป็นตัวห้อยREPLACE หา ~30 ไม่เจอแก้เสร็จต้อง cache:clear
ในฐานข้อมูลไม่มีข้อความ ~30 เหลืออยู่ มีแต่ XML ที่ parse แล้ว ถ้าค้นด้วยข้อความดิบจะไม่เจอ
php flarum cache:clear
กับดักย่อยตอนแก้ผ่าน API

บางโฮสต์ ModSecurity บล็อกเมธอด PATCH ของ API Flarum — ถ้าเจอ ใช้ header X-HTTP-Method-Override: PATCH ยิงเป็น POST แทน และการซ่อนโพสต์ต้องตั้ง hidden_at ทั้งตาราง discussions และ posts ไม่ใช่ตารางเดียว

สรุป

  1. Flarum ใช้ Litedown ไม่ใช่ CommonMark — ~ = subscript, ^ = superscript
  2. คนไทยเจอบ่อยเพราะใช้ ~ แทน "ประมาณ" — เลี่ยงด้วยคำไทยหรือครอบ inline code
  3. แก้ผ่าน DB ต้องรู้ว่าเก็บเป็น s9e XML ไม่ใช่ markdown ดิบ แล้ว cache:clear
  4. ModSec บล็อก PATCH -> ใช้ X-HTTP-Method-Override; ซ่อนโพสต์ตั้ง hidden_at 2 ตาราง

เรื่องนี้เล็กแต่เจอกันเยอะ โดยเฉพาะบอร์ดที่คนไทยพิมพ์กันเยอะ ๆ พอรู้ว่า ~ มีความหมายพิเศษก็เลี่ยงได้ง่าย และถ้าต้องไปแก้ของเก่าเป็นจำนวนมาก อย่าลืมว่าในฐานข้อมูลมันเป็น XML ไม่ใช่ตัวที่เราพิมพ์ ใครดูแล Flarum ที่มีเนื้อหาไทยเยอะ ๆ เก็บไว้กันงงครับ ตรงไหนผมอธิบายตกหล่นหรือพิมพ์ผิด เดี๋ยวกลับมาแก้เพิ่มให้ภายหลังครับ

อยากให้เราทำให้ไหม?

ให้เราช่วยติดตั้ง ตั้งค่า ย้ายระบบ หรือแก้ปัญหาเซิร์ฟเวอร์ เพื่อให้คุณมีเวลาไปทำงานที่สำคัญกว่า

คุยเรื่องงานกับเรา

เคยเจองานแบบนี้ไหม? ติดตรงไหน?

มาแลกวิธีกันต่อในบอร์ด LinuxThai

→ คุยต่อในบอร์ด

ความคิดเห็น 0

ยังไม่มีความคิดเห็น — เป็นคนแรกเลย