URL Encode คืออะไร ทำไมลิงก์ภาษาไทยกลายเป็น %E0%B8 ถอดรหัสออนไลน์ฟรี




ลิงก์ภาษาไทยที่คัดลอกมาแล้วกลายเป็นเส้นยาวๆ แบบ %E0%B8%84%E0%B9%89%E0%B8%99%E0%B8%AB%E0%B8%B2 คือผลของการทำ URL Encode หรือการเข้ารหัสลิงก์ เพราะที่อยู่เว็บเขียนได้เฉพาะตัวอักษรชุดพื้นฐาน ตัวอักษรไทยจึงถูกแปลงเป็นรหัส ถ้าอยากรู้ว่ารหัสนั้นคือคำว่าอะไร ให้วางลงในเครื่องมือ URL Encode / Decodeแล้วกดถอดรหัส ข้อความไทยจะกลับมาให้อ่านทันที ทำในเบราว์เซอร์ของคุณเอง ไม่ต้องอัปโหลดอะไร ไม่ต้องลงโปรแกรม

บทความนี้อธิบายว่าทำไมถึงต้องเข้ารหัส ตัวอักษรไทยหนึ่งตัวกลายเป็นรหัสอะไร ใช้เครื่องมือยังไง และข้อควรระวังที่คนมักพลาด เช่น เครื่องหมาย + กับ %20 ต่างกันยังไง ตัวอย่างทุกบรรทัดในบทความคำนวณด้วยฟังก์ชันเดียวกับที่เครื่องมือใช้จริง

URL Encode คืออะไร

URL Encode หรือที่เรียกว่า Percent-encoding คือวิธีเขียนอักขระที่ไม่สามารถอยู่ใน URL ได้โดยตรงให้เป็นรหัสรูปแบบ % ตามด้วยเลขฐาน 16 สองหลัก เช่น ช่องว่างกลายเป็น %20 เครื่องหมาย & กลายเป็น %26 ตามมาตรฐาน RFC 3986 อักขระที่ใช้ได้ทุกตำแหน่งโดยไม่ต้องเข้ารหัส (กลุ่ม unreserved) มีแค่ตัวอักษรอังกฤษ ตัวเลข และเครื่องหมาย - . _ ~ ส่วนเครื่องหมายอย่าง / ? & = เขียนตรงๆ ได้เฉพาะตอนทำหน้าที่ของมันในโครงสร้างลิงก์ และอักขระอื่นทั้งหมด รวมถึงตัวอักษรไทย ต้องแปลงเป็นไบต์ UTF-8 ก่อน แล้วเขียนไบต์ละหนึ่งชุด %XX

ข้อควรรู้คือการเข้ารหัสแบบนี้ไม่ได้ทำให้ข้อมูลเป็นความลับ ใครก็ถอดกลับได้ เป็นแค่การเขียนให้ถูกรูปแบบเพื่อให้ลิงก์ส่งผ่านระบบต่างๆ ได้โดยไม่เพี้ยน

ทำไมตัวอักษรไทยหนึ่งตัวกลายเป็น 9 ตัวอักษร

ตัวอักษรไทยแต่ละตัวใช้ 3 ไบต์ใน UTF-8 และไบต์ละหนึ่งไบต์ถูกเขียนเป็น %XX (3 อักขระ) จึงได้ตัวอักษรไทย 1 ตัว = 3 ไบต์ = 9 อักขระ ตัวอย่างเช่น “ก” กลายเป็น %E0%B8%81 ตารางนี้คำนวณจากเครื่องมือจริง

ข้อความ ผลลัพธ์หลังเข้ารหัส ไบต์ UTF-8 ความยาวที่ได้
ก %E0%B8%81 3 9 อักขระ
ไทย %E0%B9%84%E0%B8%97%E0%B8%A2 9 27 อักขระ
ค้นหา %E0%B8%84%E0%B9%89%E0%B8%99%E0%B8%AB%E0%B8%B2 15 45 อักขระ
สวัสดี %E0%B8%AA%E0%B8%A7%E0%B8%B1%E0%B8%AA%E0%B8%94%E0%B8%B5 18 54 อักขระ
แปลงไฟล์ %E0%B9%81%E0%B8%9B%E0%B8%A5%E0%B8%87%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C 24 72 อักขระ

สังเกตว่า “ค้นหา” มี 5 ตัว (ค ้ น ห า) เพราะไม้โท ้ นับเป็นอักขระแยกหนึ่งตัว จึงได้ 15 ไบต์ ไม่ใช่ 12 ส่วนรหัส %E0%B8 และ %E0%B9 ที่เห็นซ้ำเกือบทุกตัวมาจากการที่ตัวอักษรไทยทั้งหมดอยู่ในช่วงรหัสใกล้กัน จึงขึ้นต้นด้วยไบต์ E0 เหมือนกัน

วิธีถอดรหัสลิงก์ภาษาไทย ทำยังไง

  1. คัดลอกลิงก์หรือข้อความที่เป็นรหัส เช่น https://example.com/%E0%B8%84%E0%B9%89%E0%B8%99%E0%B8%AB%E0%B8%B2
  2. เปิดเครื่องมือ URL Encode / Decode แล้ววางลงในช่องบน
  3. กดปุ่ม ถอดรหัส (Decode)
  4. ผลลัพธ์จะขึ้นในช่องล่าง ได้ https://example.com/ค้นหา กดคัดลอกผลลัพธ์ไปใช้ได้เลย

ถ้าวางลิงก์ทั้งเส้นที่มีทั้งส่วนภาษาไทยและส่วนอังกฤษ เครื่องมือจะแปลงเฉพาะส่วนที่เป็นรหัส ส่วนที่เป็นภาษาอังกฤษปกติจะคงเดิม ตัวอย่างการถอดรหัสลิงก์ที่มีคำค้นหา:

ก่อนถอดรหัส หลังถอดรหัส
https://example.com/%E0%B8%84%E0%B9%89%E0%B8%99%E0%B8%AB%E0%B8%B2?q=%E0%B9%81%E0%B8%9B%E0%B8%A5%E0%B8%87%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C https://example.com/ค้นหา?q=แปลงไฟล์

วิธีเข้ารหัส (Encode) ให้ถูก ไม่ให้ลิงก์พัง

ขั้นตอนเข้ารหัสเหมือนกัน แต่กดปุ่ม เข้ารหัส (Encode) แทน จุดที่ต้องระวังคือเครื่องมือเข้ารหัสแบบ “ส่วนประกอบของ URL” (ตรงกับฟังก์ชัน encodeURIComponent ใน JavaScript) ซึ่งจะแปลงเครื่องหมายโครงสร้างลิงก์อย่าง : / ? = ด้วย ถ้าวางลิงก์ทั้งเส้น ผลที่ได้จะเป็นแบบนี้:

สิ่งที่วาง ผลลัพธ์ นำไปใช้
ลิงก์ทั้งเส้น https://example.com/ค้นหา?q=แปลงไฟล์ https%3A%2F%2Fexample.com%2F%E0%B8%84... ใช้เป็นค่าพารามิเตอร์ในลิงก์อื่นได้ แต่เปิดเป็นลิงก์ตรงๆ ไม่ได้
เฉพาะส่วนไทย ค้นหา %E0%B8%84%E0%B9%89%E0%B8%99%E0%B8%AB%E0%B8%B2 นำไปต่อท้ายลิงก์ได้เลย

สรุปวิธีที่ปลอดภัยที่สุดคือ เข้ารหัสเฉพาะส่วนที่เป็นภาษาไทยหรือคำค้นหา แล้วนำไปต่อเข้ากับส่วน https:// และ / ด้วยตัวเอง

เครื่องหมายพิเศษที่ถูกเข้ารหัสเมื่อเข้ารหัสแบบส่วนประกอบ

ตารางนี้คือผลของเครื่องมือจริงเมื่อเข้ารหัสแต่ละอักขระ เครื่องหมายที่มีหน้าที่พิเศษใน URL จะถูกแปลงเพื่อไม่ให้ไปปนกับโครงสร้างลิงก์

อักขระ ผลลัพธ์ หน้าที่ใน URL
ช่องว่าง %20 ไม่มี (ห้ามอยู่ใน URL)
# %23 เริ่มส่วนอ้างอิงภายในหน้า
? %3F เริ่มส่วนคำค้นหา (query)
& %26 คั่นระหว่างพารามิเตอร์
= %3D คั่นชื่อกับค่าของพารามิเตอร์
/ %2F คั่นระดับโฟลเดอร์
: %3A คั่นโปรโตคอลหรือพอร์ต
+ %2B ในแบบฟอร์มหมายถึงช่องว่าง
% %25 ตัวนำหน้ารหัสเอง

ส่วน - _ . ~ และ ! ' ( ) * เครื่องมือจะไม่แปลง เพราะเป็นอักขระที่ใช้ใน URL ได้อยู่แล้ว ตามรายการในเอกสาร MDN ของ encodeURIComponent

เมื่อไหร่ที่ต้องใช้ Encode หรือ Decode

  • ส่งลิงก์ที่มีคำค้นหาภาษาไทย เช่น ลิงก์ผลค้นหาในเว็บ ถ้าเข้ารหัสไว้ก่อนจะไม่เพี้ยนเมื่อผ่านแชทหรืออีเมล
  • ตั้งค่าพารามิเตอร์ใน API หรือสคริปต์ ที่รับค่าภาษาไทย ต้องเข้ารหัสทุกครั้งก่อนต่อเข้า URL
  • เปิดอ่านลิงก์ที่ได้มาเป็นรหัส เช่น จากรายงาน Analytics หรือล็อกเซิร์ฟเวอร์ ใช้ถอดรหัสให้รู้ว่าผู้ใช้ค้นหาหรือเข้าหน้าอะไร
  • ตรวจสอบลิงก์ก่อนกด ถ้าลิงก์ยาวผิดปกติ ถอดรหัสดูก่อนว่าปลายทางคืออะไร

ข้อควรระวังที่คนมักพลาด

เครื่องหมาย + กับ %20 ไม่เหมือนกันเสมอไป

มาตรฐาน URL ทั่วไปเขียนช่องว่างเป็น %20 แต่รูปแบบข้อมูลฟอร์มเว็บ (application/x-www-form-urlencoded) นิยมใช้ + แทนช่องว่าง เครื่องมือนี้ตอนถอดรหัสจะแปลง + เป็นช่องว่างให้ ดังนั้นลิงก์ pee+chong%202569 จะถอดได้ pee chong 2569 แต่ถ้าข้อมูลของคุณมี + จริงๆ เช่น 1+1 เครื่องมือจะถอดได้ 1 1 ตอนเข้ารหัสเครื่องมือเขียน + เป็น %2B ซึ่งถอดกลับได้ถูกต้อง

เข้ารหัสซ้ำสองรอบ

ถ้าเข้ารหัสสิ่งที่เข้ารหัสแล้วอีกรอบ เครื่องหมาย % จะถูกแปลงเป็น %25 ทำให้ “ก” กลายเป็น %25E0%25B8%2581 ซึ่งถอดครั้งเดียวจะได้ %E0%B8%81 ไม่ใช่ตัวอักษรไทย อาการนี้คือสัญญาณว่าลิงก์ถูกเข้ารหัสซ้ำ ให้กดถอดรหัสอีกครั้ง

ถอดรหัสแล้วขึ้นว่า “ถอดรหัสไม่ได้”

ข้อความนี้ขึ้นเมื่อรหัสไม่สมบูรณ์ ที่พบบ่อยมี 3 แบบ ได้แก่ คัดลอกมาไม่ครบ เช่นขาดไบต์ท้าย (%E0%B8 มีไม่ครบ 3 ไบต์ของตัวอักษรไทยหนึ่งตัว) มีเครื่องหมาย % อยู่เฉยๆ เช่นข้อความ 100% หรือ % ตามด้วยตัวอักษรที่ไม่ใช่เลขฐาน 16 เช่น %ZZ ทั้งสามกรณีเป็น URI malformed ใน JavaScript ให้ตรวจว่าคัดลอกครบและไม่มี % ที่ไม่ใช่รหัส

ชื่อโดเมนภาษาไทยไม่ใช้ %E0%B8

เรื่องนี้สับสนบ่อย ส่วนที่เข้ารหัสด้วย %XX คือส่วนพาธและคำค้นหาหลังชื่อโดเมน ส่วน ชื่อโดเมนภาษาไทย ใช้ระบบอื่นเรียกว่า Punycode ขึ้นต้นด้วย xn-- เช่น “แปลงไฟล์” ที่เป็นชื่อโดเมนของเว็บนี้ คือ xn--72c3bnwc7nya0e ดังนั้นถ้าเห็น xn-- ในลิงก์ นั่นคือชื่อโดเมน ไม่ใช่ส่วนที่ถอดด้วยเครื่องมือ URL Decode

ความปลอดภัยและความเป็นส่วนตัว

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

เรื่องที่เกี่ยวข้อง

รหัส %XX ก็คือเลขฐาน 16 ซึ่งอ่านเพิ่มได้ในเลขฐาน 2 8 10 16 คืออะไร แปลงเลขฐานยังไง ส่วนใครที่ทำงานกับข้อมูลที่ต้องเข้ารหัสอีกแบบ อ่านต่อได้ที่Base64 คืออะไร ใช้ทำอะไรได้บ้าง และJSON คืออะไร ทำไมต้องจัดรูปแบบ หรือถ้าสนใจรหัสสีแบบ HEX ในงานเว็บ ดูรหัสสี HEX RGB HSL ต่างกันยังไง

คำถามที่พบบ่อย

URL Encode คืออะไร

คือการแปลงอักขระที่ใช้ใน URL ไม่ได้โดยตรง เช่น ช่องว่างและตัวอักษรไทย ให้เป็นรหัสแบบ %XX เพื่อให้ลิงก์ส่งผ่านระบบต่างๆ ได้ถูกต้อง

ทำไมลิงก์ภาษาไทยถึงกลายเป็น %E0%B8

เพราะ URL เขียนได้เฉพาะชุดอักขระพื้นฐาน ตัวอักษรไทยจึงถูกแปลงเป็นไบต์ UTF-8 แล้วเขียนไบต์ละหนึ่งชุด %XX ตัวอักษรไทยเกือบทุกตัวขึ้นต้นด้วย %E0%B8 หรือ %E0%B9

ตัวอักษรไทยหนึ่งตัวกลายเป็นกี่อักขระ

9 อักขระ เพราะตัวอักษรไทยใช้ 3 ไบต์ใน UTF-8 และแต่ละไบต์เขียนเป็น %XX ยาว 3 อักขระ

%20 กับ + ต่างกันยังไง

ทั้งสองแทนช่องว่าง แต่ %20 เป็นรูปแบบมาตรฐานของ URL ส่วน + ใช้ในข้อมูลฟอร์มเว็บ เครื่องมือนี้ถอดรหัส + เป็นช่องว่างและเข้ารหัสช่องว่างเป็น %20

ลิงก์ที่เข้ารหัสแล้วเปิดได้เหมือนเดิมไหม

ได้ ลิงก์ที่เป็นรหัสกับลิงก์ภาษาไทยชี้ไปที่เดียวกัน เบราว์เซอร์และเซิร์ฟเวอร์ถอดรหัสให้เอง เพียงแต่แบบที่เข้ารหัสแล้วอ่านยากสำหรับคน

เครื่องมือเก็บข้อความที่ฉันวางไว้ไหม

ไม่ ทุกอย่างทำงานในเบราว์เซอร์ของคุณ ไม่มีการส่งหรือบันทึกข้อมูลไปที่เซิร์ฟเวอร์

สรุป

URL Encode คือการเขียนอักขระที่ URL ไม่รองรับให้อยู่ในรูป %XX ตัวอักษรไทยหนึ่งตัวกลายเป็น 9 อักขระเพราะใช้ 3 ไบต์ใน UTF-8 วิธีใช้คือวางลิงก์ลงในช่องแล้วกดถอดรหัสเมื่ออยากอ่าน หรือกดเข้ารหัสเมื่ออยากส่งคำค้นหาภาษาไทยใน URL อย่าลืมเข้ารหัสเฉพาะส่วนที่ต้องการ ระวังเครื่องหมาย + และการเข้ารหัสซ้ำ พร้อมแล้วลองURL Encode / Decode ออนไลน์ฟรีได้เลย

แหล่งอ้างอิง: RFC 3986 (Uniform Resource Identifier: Generic Syntax) หัวข้อ Percent-Encoding และ Unreserved Characters, MDN Web Docs (encodeURIComponent และ encodeURI), WHATWG URL Standard (application/x-www-form-urlencoded) ตัวอย่างและตารางทั้งหมดคำนวณด้วยฟังก์ชัน encodeURIComponent และ decodeURIComponent ที่เครื่องมือใช้จริง