Punycode Converter: คู่มือฉบับสมบูรณ์สำหรับโดเมน IDN และ xn--
เข้าใจหลักการทำงานของ internationalized domain names (IDN) และแปลงโดเมน Unicode เป็น Punycode (xn--) กลับไปมาได้ทันทีด้วย Punycode Converter ฟรี ที่รันใน browser 100%
Table of Contents
ระบบ DNS ถือกำเนิดในยุคที่ไม่มีใครคิดว่า web address จะถูกเขียนด้วยภาษาไทย จีน ญี่ปุ่น อาหรับ หรือซีริลลิก เบื้องหลัง scene ทั้งหมด DNS ยังคงรับตัวอักษร ASCII เท่านั้น คือ a–z, ตัวเลข และ hyphen แต่คนทั้งโลกกลับใช้งาน internet ด้วยภาษาเขียนของตัวเอง Internationalized domain names (IDN) คือสะพานเชื่อมช่องว่างนี้ ทำให้โดเมนอย่าง münchen.de, 日本.jp หรือแม้แต่ ราชการ.ไทย ของหน่วยงานรัฐไทย มีอยู่ได้จริงในรูปแบบภาษาแม่
แต่ชื่อ Unicode ที่อ่านง่ายเหล่านี้ไม่สามารถส่งเข้าสู่ DNS โดยตรง ก่อนที่ query จะถึง name server ทุก label ที่มีตัวอักษร non-ASCII จะถูกแปลงเป็น ASCII-Compatible Encoding (ACE) ด้วยอัลกอริทึมที่ชื่อว่า Punycode ตามมาตรฐาน RFC 3492 โดย label ที่ถูก encode จะขึ้นต้นด้วย prefix พิเศษ xn-- เสมอ เพื่อบอก resolver, browser และ mail server ว่า "label นี้คือ Punycode — ต้อง decode ก่อนแสดงผล" นั่นคือเหตุผลที่ münchen.de กลายเป็น xn--mnchen-3ya.de และ ราชการ.ไทย กลายเป็น xn--12c2b4a3dxc.xn--o3cw4h เมื่อออกจาก keyboard ของคุณ
Punycode Converter ฟรีของเราจัดการแปลงสองทิศทางนี้ได้ทันที ทำงานใน browser ทั้งหมด ไม่ว่าคุณจะต้องการ idn converter สำหรับงาน infrastructure ประจำวัน ต้องการ xn-- decoder ไว้ตรวจ link ที่น่าสงสัย หรือแค่อยากเข้าใจว่า domain name encoding ทำงานอย่างไร คู่มือนี้ครอบคลุมทั้ง concept, workflow และกับดักที่ควรรู้
ทำไมต้องใช้ Punycode Converter
- จดโดเมน IDN ได้อย่างมั่นใจ — registrar ส่วนใหญ่ขอ ACE form ตอนจดหรือตั้งค่า IDN การแปลง unicode to punycode ล่วงหน้าทำให้เห็นชัดว่า string ASCII อะไรจะลงไปใน zone จริง
- ถอด mask link อันตรายในไม่กี่วินาที — แคมเปญ phishing ชอบโดเมนหน้าตาคล้ายกัน วาง address ที่ขึ้นต้น xn-- ลงใน tool จะทำหน้าที่เป็น xn-- decoder เผยให้เห็น script ตัวจริงที่ซ่อนอยู่
- Debug zone file และ mail server — record อย่าง SPF, DKIM, MX และระบบ legacy จำนวนมากคาดหวัง label แบบ ACE การแปลง punycode to unicode (และย้อนกลับ) ทำให้เห็นทันทีว่า record ไหน mismatch
- แปลงทั้งโดเมน ไม่ใช่แค่ชิ้นส่วน — tool เดินทำงานทีละ label คั่นด้วยจุด แปลงเฉพาะ label ที่จำเป็น และไม่แตะ label ที่เป็น ASCII อยู่แล้ว
- ความเป็นส่วนตัวเต็มร้อย — ทุกอย่างรัน client-side ไม่มี server round-trip ไม่มี log โดเมนของคุณไม่เคยออกจากเครื่อง
- ผลลัพธ์ตรงตามมาตรฐาน — implementation ทำตามอัลกอริทึม RFC 3492 ครบถ้วน ผลลัพธ์จึงตรงกับที่ registrar, browser และ resolver ใช้จริง
ฟีเจอร์เด่น
| ฟีเจอร์ | รายละเอียด |
|---|---|
| Encode / Decode สองทิศทาง | Unicode → Punycode (ACE) และ xn-- → Unicode ใน tab เดียวกัน |
| ปุ่ม Swap | สลับทิศทางการแปลงและผลลัพธ์กลับด้านในคลิกเดียว |
| แปลงทีละ label | ทุก label ที่คั่นด้วยจุดถูกแปลงอิสระ, label ASCII เดิม ๆ ไม่ถูกแตะ |
| ตัวอย่างในตัว | münchen.de ↔ xn--mnchen-3ya.de, 日本.jp ↔ xn--wgv71a119e.jp, ราชการ.ไทย ↔ xn--12c2b4a3dxc.xn--o3cw4h |
| Copy คลิกเดียว | คัดลอกผลลัพธ์พร้อม confirmation ทันที |
| 100% client-side | ไม่มีการยิง request ไป server, ไม่มีอะไรถูก log |
สองสามจุดที่ควรไฮไลต์: ถ้า label ไหน decode ไม่ได้ (เช่น string เสียที่อ้างว่าเป็น punycode แต่จริง ๆ ไม่ใช่) tool จะปล่อย label นั้นไว้เหมือนเดิมแทนที่จะพังทั้งบรรทัด — สิ่งที่คุณเห็นคือสิ่งที่ DNS เห็น ไม่มีประหลาดใจ
อีกจุดคือความเร็ว เพราะอัลกอริทึมทั้งหมด (base-36, generalized variable-length integers, bias adaptation) ถูก implement ไว้ใน client ธรรมดา การแปลงแทบเกิดขึ้นทันทีที่วางข้อความ — เหมาะกับงานตรวจเช็กเป็นชุด ๆ ระหว่าง incident หรือ code review
วิธีใช้งาน
- เปิด Punycode Converter บน browser อันไหนก็ได้ — ไม่ต้องติดตั้งอะไร ไม่ต้องสมัครสมาชิก
- วางโดเมนที่ต้องการแปลงลงในช่อง input จะเป็นรูปแบบ Unicode (ราชการ.ไทย) หรือ ACE (xn--12c2b4a3dxc.xn--o3cw4h) ก็ได้
- เลือก tab Encode สำหรับ Unicode → Punycode หรือ tab Decode สำหรับ xn-- → Unicode — หรือกดปุ่ม Swap เพื่อสลับทิศทางพร้อมข้อมูลเดิม
- ดูผลลัพธ์ที่แสดงทันที — สังเกตว่าแต่ละ label ถูกจัดการแยกกัน: label ไทยถูก encode, label อย่าง www หรือ com ผ่านไปเฉย ๆ
- กดปุ่ม Copy เพื่อคัดลอกผลลัพธ์ไปใช้ต่อใน zone file, ticket หรือ terminal
ลองเล่นกับตัวอย่างสำเร็จรูปในหน้า tool ก่อนก็ได้ — คลิกที่ ราชการ.ไทย หรือ 日本.jp แล้วดูว่า ACE form ออกมาหน้าตาเป็นอย่างไร
เข้าใจ Punycode และ IDN
ทำไม DNS ถึง ASCII-only? DNS protocol ถูกออกแบบในทศวรรษ 1980 เมื่อ byte เดียวต่ออักขระคือบรรทัดฐาน ข้อกำหนดเดิมจำกัด label ไว้ที่ตัวอักษร ตัวเลข และ hyphen และเพราะระบบทั้งโลก (root server, firewall, mail gateway, library โบราณ) ต้องทำงานร่วมกันได้ เปลี่ยนแปลง wire format ไม่ได้ง่าย ๆ ทางออกจึงเป็น layer ของการเข้ารหัสที่ application รับผิดชอบ — นั่นคือ IDNA (Internationalizing Domain Names in Applications)
ACE คืออะไร และ xn-- มาจากไหน ASCII-Compatible Encoding คือรูปแบบที่มนุษย์อ่านไม่ออกแต่ DNS ยอมรับ IDNA เลือก Punycode จาก RFC 3492 เป็น ACE เพราะกินพื้นที่น้อยที่สุดเมื่อเทียบกับตัวเลือกอื่น (เช่น UTF-7 หรือ hex) คำว่า xn-- เป็น prefix ที่ IANA จองไว้เพื่อป้องกันการชนกับ label ปกติ เมื่อ resolver เห็น xn-- นำหน้า มันรู้ทันทีว่าต้อง decode ด้วย Punycode ก่อนแสดงต่อ user
อัลกอริทึมทำงานยังไง (ภาพรวม) Punycode แยก label ออกเป็นสองส่วน: ส่วนแรกคือ basic code point (ASCII ที่มีอยู่เดิม) คั่นด้วย hyphen ตัวสุดท้าย ส่วนที่สองคือชุดตัวเลข base-36 ที่บอกว่าตัวอักษร non-ASCII ตัวไหนถูกแทรก ณ ตำแหน่งใด ตัวเลขเหล่านี้ใช้ generalized variable-length integer และมี bias adaptation (พารามิเตอร์ damp 700, initial bias 72, skew 38) ปรับความยาว digit ให้สั้นที่สุดสำหรับ string ที่พบบ่อย ผลลัพธ์คือ string สั้น ปลอดภัยต่อ case-insensitive และ decode ได้ทางเดียว (unambiguous)
ทำไม ราชการ.ไทย ถึงยาวเป็น xn--12c2b4a3dxc.xn--o3cw4h เพราะ IDNA ทำงานทีละ label: label ราชการ กลายเป็น xn--12c2b4a3dxc ส่วน TLD ไทย กลายเป็น xn--o3cw4h แล้วค่อย join ด้วยจุดตามเดิม — นี่คือเหตุผลที่ tool ของเราก็แปลงทีละ label เหมือนกัน เพื่อให้พฤติกรรมตรงกับ browser และ resolver เป๊ะ ๆ
งานที่เจอจริง
ตรวจ phishing และ homograph attack
Email อ้างว่ามาจากธนาคารแนบ link xn--paypa1-2ve.com วางลง decoder ปุ๊บ เห็นทันทีว่าจริง ๆ มันคือ paypaⅠ.com (เลข 1 โรมัน) หรือ label ที่ใช้อักษรซีริลลิก а แทน a ภาษาละติน — homograph attack คลาสสิกที่ตาคนเห็นเหมือนกันเป๊ะ แต่ Punycode เผยความต่างให้หมด SOC team ใช้วิธีนี้ triage ลิงก์แปลก ๆ ใน ticket ทุกวัน
Web admin ดูแลโดเมน .ไทย และ IDN เอเชีย
ทีมที่ดูแลเว็บไซต์ภาครัฐหรือแบรนด์ที่จดโดเมน .ไทย ต้องสลับไปมาระหว่างรูปแบบภาษาไทย (ใช้ใน campaign, QR code, เอกสาร) กับ ACE form (ใช้ใน DNS zone, SSL certificate request, CDN config) เครื่องมือแปลงสองทางทำให้สลับได้ไม่ต้องเปิด registry lookup ทีละอัน — ยิ่งเว็บที่มีหลาย subdomain แบบ www.ราชการ.ไทย ด้วยแล้ว ยิ่งจำเป็น
Debug DNS และ email records
DKIM selector, CNAME หรือ TXT record ที่มี label xn-- คลายยากเวลาเทียบกับของจริง แปลงกลับเป็น Unicode ก่อนแล้วเทียบกับ config ฝั่ง application ทำให้เห็นความต่างที่ตามองไม่เห็นตอนอ่าน ACE ล้วน ๆ และเวลาเขียน script จัดการ zone file เช็คว่า ACE ที่ generate ได้ตรงกับที่ registry คืนมาหรือเปล่า ก็แปลงกลับมา diff ได้เลย
เรียนรู้ว่า IDNA ทำงานยังไง
นักพัฒนาที่เขียน library จัดการ URL, email validation หรือ internationalization ควรเข้าใจ Punycode อย่างน้อยระดับ concept การลอง encode/decode จริงกับหลากหลาย script (เยอรมัน, ญี่ปุ่น, ไทย, emoji) สร้าง intuition ได้เร็วกว่าอ่าน RFC เปล่า ๆ มาก — เห็น pattern ว่าทำไมบางโดเมน ACE สั้น บางโดเมนยาวมาก
Best Practices
- ตรวจ ACE form ก่อนจดโดเมนเสมอ — เห็น string ที่จะอยู่ใน DNS จริง กันพลาดพิมพ์ Unicode ที่ถอดกลับไม่ได้ตามที่ตั้งใจ
- แปลงเป็น lowercase ก่อน decode — IDNA เป็น case-insensitive แต่บาง implementation ของเก่าตีความ label ปนตัวพิมพ์ใหญ่ไม่เหมือนกัน normalize ก่อนเสมอปลอดภัยกว่า
- ระวัง homograph ในการ review — เวลาอนุมัติ domain ในระบบ auth หรือ whitelist, decode เป็น Unicode แล้วอ่านด้วยตา อย่าเชื่อ string ASCII เพียงอย่างเดียว
- เก็บ ACE ใน zone file และ config — tool อย่าง BIND, Nginx หรือ certbot บางตัวยังคาดหวัง ASCII เท่านั้น เก็บรูปแบบ xn-- ใน infra แล้วค่อยแปลงตอนแสดงผลปลายทาง
- ทดสอบ mail path ด้วย — ระหว่างโดเมน IDN กับระบบ email เก่าบางตัวยังหลุด ๆ รอย ๆ ส่ง test ไปยัง ACE form ของ address เพื่อยืนยันว่า route ครบ
- อย่าเข้ารหัสเองมือเปล่า — อัลกอริทึม bias มีรายละเอียดปลีกย่อยมาก ใช้ tool ที่ implement RFC 3492 ครบ (อย่างตัวนี้) หรือ library ที่ผ่าน test suite มาตรฐานเสมอ
ลองเลย — ฟรี ไม่ต้องสมัคร
โดเมนไทยที่คุณดูแล, link น่าสงสัยใน inbox, หรือ zone file ที่เต็มไปด้วย xn-- — ทั้งหมดจัดการได้ในไม่กี่วินาทีด้วย Punycode Converter วางโดเมน กดแปลง ได้คำตอบทันที โดยที่ข้อมูลไม่เคยออกจากเบราว์เซอร์ของคุณ
ถ้าคุณทำงานกับ IDN ประจำ ลอง bookmark ไว้เลย — เป็นเครื่องมือเล็ก ๆ ที่ช่วยประหยัดเวลาได้จริงทุกสัปดาห์
เครื่องมือที่เกี่ยวข้อง
- URL Encoder — encode/decode URL และ query string ให้ปลอดภัยต่อการส่งผ่าน network
- Base64 Encoder & Decoder — แปลงข้อมูลไปมากับ Base64 สำหรับ data URI, token และ API payload
- ASCII/Binary Converter — สำรวจความสัมพันธ์ระหว่างข้อความ, ASCII และ binary
ขอให้สนุกกับการถอดรหัสโดเมน!