การเข้ารหัส URL คืออะไร?
การเข้ารหัส URL (หรือที่เรียกว่า percent-encoding) คือกลไกการเข้ารหัสข้อมูลใน Uniform Resource Identifier (URI) เพื่อให้มีเฉพาะอักขระที่ RFC 3986 อนุญาตปรากฏในสตริงสุดท้าย อักขระใดก็ตามที่ไม่ใช่อักขระที่ไม่สงวน (A–Z, a–z, 0–9, -, _, ., ~) จะถูกแทนที่ด้วยเครื่องหมายเปอร์เซ็นต์ตามด้วยตัวเลขฐานสิบหกสองหลักที่แสดงค่าไบต์ UTF-8 ของอักขระนั้น — ตัวอย่างเช่น ช่องว่างจะกลายเป็น %20 และ & จะกลายเป็น %26
Percent-encoding เป็นสิ่งจำเป็นเพราะ URL สามารถมีเฉพาะชุดอักขระ ASCII ที่จำกัดเท่านั้น เมื่อ URL มีอักขระนอกชุดนี้ — ช่องว่าง ตัวอักษร Unicode สัญลักษณ์เช่น &, = หรือ / ที่ใช้เป็นค่าตามตัวอักษรแทนตัวคั่นโครงสร้าง — อักขระเหล่านั้นต้องถูกเข้ารหัสเพื่อป้องกันไม่ให้ตัวแยกวิเคราะห์ URL ตีความผิด สิ่งนี้สำคัญอย่างยิ่งสำหรับค่า query string ซึ่ง & หรือ = ที่ไม่ได้เข้ารหัสจะทำลายโครงสร้างพารามิเตอร์
ทำไมต้องใช้เครื่องมือนี้?
ดูทันทีว่าข้อความของคุณเข้ารหัสอย่างไรในทั้งสองโหมด พร้อมการเปรียบเทียบแบบเคียงข้างกันแบบสด — โดยไม่ต้องเขียนโค้ดเพื่อตรวจสอบ edge cases
⚡ตัวอย่างสด
ผลลัพธ์อัปเดตขณะที่คุณพิมพ์ ลองใส่ข้อมูลต่างๆ และดูทันทีว่าอักขระใดถูกเข้ารหัสและอักขระใดถูกเก็บรักษา
🔀สองโหมด
สลับระหว่าง encodeURIComponent (สำหรับค่า) และ encodeURI (สำหรับ URL เต็ม) โดยไม่ต้องออกจากหน้า
🔒ฝั่งไคลเอนต์เท่านั้น
การเข้ารหัสทั้งหมดทำงานในเครื่องในเบราว์เซอร์ของคุณ พารามิเตอร์ query และโทเค็นที่ละเอียดอ่อนไม่เคยถูกส่งไปยังเซิร์ฟเวอร์
📋คัดลอกในคลิกเดียว
คัดลอกผลลัพธ์ที่เข้ารหัสไปยังคลิปบอร์ดด้วยปุ่มเดียว พร้อมวางลงในโค้ด เทอร์มินัล หรือแถบที่อยู่เบราว์เซอร์โดยตรง
วิธีใช้เครื่องมือเข้ารหัส URL ออนไลน์นี้
ไม่ต้องมีบัญชี ไม่ต้องติดตั้ง วางหรือพิมพ์ข้อความในช่องป้อนข้อมูล แล้วผลลัพธ์ที่เข้ารหัสด้วยเปอร์เซ็นต์จะปรากฏทันที ทุกอย่างทำงานในเบราว์เซอร์ของคุณ — ข้อมูลของคุณไม่เคยออกจากอุปกรณ์
- 1
วางข้อความหรือ URL ของคุณ
ป้อนสตริงใดก็ได้ — ค่าพารามิเตอร์คิวรี URL เต็ม เซกเมนต์เส้นทาง หรือข้อมูล JSON เครื่องมือเข้ารหัสจะประมวลผลทีละอักขระตาม RFC 3986
- 2
เลือกโหมดการเข้ารหัส
เลือก encodeURIComponent เพื่อเข้ารหัสค่าพารามิเตอร์แต่ละตัว (เข้ารหัสทุกอย่างยกเว้นอักขระที่ไม่ถูกสงวน) เลือก encodeURI เพื่อเข้ารหัส URL เต็มโดยรักษาอักขระโครงสร้างเช่น ://?#&=
- 3
คัดลอกผลลัพธ์ที่เข้ารหัส
สตริงที่เข้ารหัสด้วยเปอร์เซ็นต์จะปรากฏทันที คลิก คัดลอก เพื่อนำผลลัพธ์ไปวางลงใน API call, form action หรือไฟล์คอนฟิกโดยตรง
- 4
ถอดรหัสกลับหากจำเป็น
ทำผิดพลาดหรืออยากตรวจสอบผลลัพธ์? สลับไปที่เครื่องมือ URL Decoder ด้วยคลิกเดียวเพื่อย้อนกลับการเข้ารหัส
อักขระใดบ้างที่ถูกเข้ารหัส?
RFC 3986 แบ่งอักขระ URL ออกเป็นสองประเภท: อักขระที่ไม่สงวน (ไม่เคยเข้ารหัส) และอักขระสงวน (มีความหมายพิเศษ — เข้ารหัสหรือเก็บรักษาตามบริบท) ตารางด้านล่างแสดงวิธีที่ฟังก์ชัน JavaScript สองตัวจัดการกับอักขระหลัก:
| อักขระ | ความหมายใน URL | encodeURIComponent | encodeURI |
|---|
| Space | word separator | %20 | %20 |
| + | plus sign | %2B | %2B |
| / | path separator | %2F | / (kept) |
| ? | query start | %3F | ? (kept) |
| # | fragment | %23 | # (kept) |
| & | param separator | %26 | & (kept) |
| = | param value | %3D | = (kept) |
| @ | auth separator | %40 | @ (kept) |
| : | scheme / port | %3A | : (kept) |
| % | percent literal | %25 | %25 |
| ~ | unreserved | ~ (kept) | ~ (kept) |
| -_.~ | unreserved set | kept as-is | kept as-is |
encodeURIComponent เทียบกับ encodeURI
JavaScript มีฟังก์ชันเข้ารหัสสองตัวที่มีพฤติกรรมแตกต่างกันมาก การเลือกผิดเป็นหนึ่งในบัก URL handling ที่พบบ่อยที่สุด:
encodeURIComponent()
เข้ารหัสทุกอย่างยกเว้นชุดอักขระที่ไม่สงวน (A–Z a–z 0–9 - _ . ~) นี่คือตัวเลือกที่ถูกต้องสำหรับการเข้ารหัสค่าพารามิเตอร์ query แต่ละตัว เซกเมนต์พาธ หรือค่าใดก็ตามที่จะถูกฝังอยู่ใน URL จะเข้ารหัส /, ?, #, & และอักขระสงวนอื่นๆ ทั้งหมด
encodeURI()
รักษาโครงสร้าง URL ทั้งหมดโดยปล่อยให้อักขระสงวน (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) ไม่ถูกเข้ารหัส ใช้เฉพาะเมื่อมี URL ครบถ้วนพร้อมโครงสร้างที่ต้องการรักษา และต้องเข้ารหัสเฉพาะอักขระที่ไม่ใช่ ASCII หรือผิดกฎภายในเท่านั้น
กรณีใช้งานทั่วไป
พารามิเตอร์ Query String
เข้ารหัสค่าพารามิเตอร์ก่อนที่จะเพิ่มลงใน URL: name=John%20Doe แทนที่จะเป็น name=John Doe ช่องว่างและอักขระพิเศษที่ไม่ได้เข้ารหัสจะทำลายตัวแยกวิเคราะห์ URL และสร้างผลลัพธ์ที่ไม่คาดคิด
การสร้าง API Request
REST API ต้องการพารามิเตอร์ query ที่เข้ารหัสอย่างถูกต้อง การเข้ารหัสค่าด้วย encodeURIComponent ป้องกันการแทรกพารามิเตอร์เพิ่มเติมผ่านอักขระเช่น & และ = ที่ฝังอยู่ในค่า
การส่งข้อมูลฟอร์ม
ฟอร์ม HTML ส่งข้อมูลเป็น application/x-www-form-urlencoded ตามค่าเริ่มต้น การเข้าใจ percent-encoding ช่วยดีบักสิ่งที่เบราว์เซอร์ส่งและสิ่งที่เซิร์ฟเวอร์ได้รับ
เซกเมนต์พาธที่มีอักขระพิเศษ
ชื่อไฟล์หรือตัวระบุที่มีช่องว่าง สแลช หรืออักขระ unicode ต้องถูก percent-encoded เมื่อใช้เป็นเซกเมนต์พาธ URL: /files/my%20document.pdf
OAuth และโทเค็นการยืนยันตัวตน
OAuth 1.0a และโปรโตคอลการยืนยันตัวตนบางอย่างกำหนดให้สตริงฐานต้องสร้างจากชื่อและค่าพารามิเตอร์ที่เข้ารหัสด้วย percent ตามอัลกอริทึมการทำให้เป็นมาตรฐานที่เข้มงวด
Deep Link และ URL การแชร์
เมื่อสร้าง URL ที่แชร์ได้ซึ่งฝังเนื้อหาของผู้ใช้ (คำค้นหา สถานะตัวกรอง พิกัด) ให้เข้ารหัสค่าไดนามิกทั้งหมดเพื่อป้องกันลิงก์เสียและ XSS ผ่านการจัดการ URL
ตัวอย่างโค้ด
วิธีเข้ารหัสสตริง URL ในภาษาและสภาพแวดล้อมยอดนิยม:
JavaScript (browser / Node.js)
// Encode a query parameter value (most common case)
encodeURIComponent('hello world & more') // → "hello%20world%20%26%20more"
// Encode a complete URL (preserves ://?#& structure)
encodeURI('https://example.com/path?q=hello world') // → "https://example.com/path?q=hello%20world"
// Build a query string safely
const params = new URLSearchParams({ q: 'hello world', lang: 'en' })
const url = `https://example.com/search?${params}` // uses + for spacesPython
from urllib.parse import quote, urlencode, quote_plus
# Encode a path segment or query value
quote('hello world & more') # → 'hello%20world%20%26%20more'
# Encode for application/x-www-form-urlencoded (space → +)
quote_plus('hello world') # → 'hello+world'
# Build a query string
urlencode({'q': 'hello world', 'lang': 'en'}) # → 'q=hello+world&lang=en'Node.js (URL API)
const url = new URL('https://example.com/search')
url.searchParams.set('q', 'hello world & more')
url.searchParams.set('lang', 'en')
console.log(url.toString())
// → https://example.com/search?q=hello+world+%26+more&lang=enCLI (curl / bash)
# curl automatically percent-encodes --data fields
curl -G "https://example.com/search" --data-urlencode "q=hello world & more"
# Manual encoding with Python one-liner
python3 -c "from urllib.parse import quote; print(quote('hello world'))"URL Encoder กับทางเลือกอื่น
มีหลายเครื่องมือที่สามารถเข้ารหัสข้อความด้วยเปอร์เซ็นต์ได้ แต่แตกต่างกันในด้านการควบคุม ความเป็นส่วนตัว และบริบท
เครื่องมือนี้
ทำงานในเบราว์เซอร์ ทันที ปลอดภัย รองรับทั้งโหมด encodeURIComponent และ encodeURI ไม่มีการส่งข้อมูลไปยังเซิร์ฟเวอร์ใด ๆ รองรับอินพุต Unicode เต็มรูปแบบ
แถบที่อยู่ของเบราว์เซอร์
เบราว์เซอร์เข้ารหัส URL โดยอัตโนมัติเมื่อคุณวาง แต่เพียงบางส่วน — รักษาอักขระพิเศษหลายตัวไว้เพื่อความอ่านง่าย ไม่เหมาะสำหรับการเข้ารหัสค่าพารามิเตอร์
URLSearchParams / urllib
แนวทางการเขียนโปรแกรมที่ถูกต้องสำหรับการสร้าง URL ใน JavaScript หรือ Python ใช้เครื่องมือนี้สำหรับการเข้ารหัสครั้งเดียวอย่างรวดเร็ว หรือเพื่อตรวจสอบสิ่งที่โค้ดของคุณจะสร้างขึ้น
คำถามที่พบบ่อย
ความแตกต่างระหว่าง %20 กับ + สำหรับช่องว่างคืออะไร?
ทั้งคู่แสดงช่องว่างแต่ในบริบทที่ต่างกัน %20 คือการแสดง percent-encoded มาตรฐานของช่องว่างและถูกต้องทุกที่ใน URL เครื่องหมาย + แสดงช่องว่างเฉพาะในรูปแบบ application/x-www-form-urlencoded (การส่งฟอร์ม HTML) ใน URL path หรือค่า query ดิบ + คือเครื่องหมายบวกตามตัวอักษรไม่ใช่ช่องว่าง ใช้ %20 เพื่อความเข้ากันได้สูงสุด
ควรใช้ encodeURIComponent กับ encodeURI เมื่อใด?
ใช้ encodeURIComponent สำหรับค่าแต่ละตัว (พารามิเตอร์ query เซกเมนต์พาธ เศษ hash) ใช้ encodeURI เฉพาะเมื่อมี URL ครบถ้วนและต้องการรักษาโครงสร้าง ข้อผิดพลาดทั่วไปคือการใช้ encodeURI กับค่า query — มันจะปล่อย & และ = ไว้โดยไม่เข้ารหัส ทำให้ query string เสีย
การเข้ารหัส URL จัดการอักขระ Unicode หรือไม่?
ใช่ อักขระที่ไม่ใช่ ASCII จะถูกแปลงเป็นการแสดงไบต์ UTF-8 ก่อน จากนั้นแต่ละไบต์จะถูก percent-encoded ตัวอย่างเช่น สัญลักษณ์ยูโร (U+20AC) เข้ารหัสเป็น %E2%82%AC — สามไบต์ UTF-8 ของมัน ทั้ง encodeURIComponent และ encodeURI จัดการสิ่งนี้ได้อย่างถูกต้องในเบราว์เซอร์สมัยใหม่ทั้งหมด
การเข้ารหัสซ้ำซ้อนเป็นปัญหาหรือไม่?
ใช่ ถ้าเข้ารหัสสตริงที่เข้ารหัสแล้ว %20 จะกลายเป็น %2520 (% เองถูกเข้ารหัสเป็น %25) เสมอเข้ารหัสค่าดิบไม่ใช่ค่าที่เข้ารหัสไว้แล้ว หากไม่แน่ใจให้ถอดรหัสก่อนแล้วเข้ารหัสใหม่
อักขระใดปลอดภัยเสมอใน URL?
อักขระที่ไม่สงวนที่กำหนดโดย RFC 3986 ปลอดภัยเสมอและไม่ต้องการการเข้ารหัสเลย: ตัวพิมพ์ใหญ่ A–Z ตัวพิมพ์เล็ก a–z ตัวเลข 0–9 ขีดกลาง (-) ขีดล่าง (_) จุด (.) และ tilde (~) ทุกอย่างอื่นควร percent-encoded เมื่อใช้เป็นค่าแทนตัวคั่นโครงสร้าง
ทำไมบาง URL มีฐานสิบหกตัวพิมพ์ใหญ่ (%2F) และบางตัวพิมพ์เล็ก (%2f)?
ทั้งคู่ถูกต้อง RFC 3986 ระบุว่าลำดับ percent-encoded ไม่คำนึงถึงตัวพิมพ์ ดังนั้น %2F และ %2f จึงเทียบเท่ากัน อย่างไรก็ตาม RFC เดียวกันแนะนำให้ใช้ตัวเลขฐานสิบหกตัวพิมพ์ใหญ่เพื่อความสอดคล้อง เบราว์เซอร์และไลบรารีส่วนใหญ่ผลิตตัวพิมพ์ใหญ่
เครื่องมือนี้เข้ารหัส URL ทั้งหมดหรือเฉพาะพารามิเตอร์?
ทั้งสองอย่าง ใช้โหมด encodeURIComponent เพื่อเข้ารหัสค่าพารามิเตอร์คิวรีแต่ละตัว (กรณีการใช้งานที่พบบ่อยที่สุด) ใช้โหมด encodeURI เพื่อเข้ารหัส URL เต็มโดยรักษาอักขระโครงสร้างเช่น ://, ?, # และ &
มีขีดจำกัดความยาวสำหรับการเข้ารหัสหรือไม่?
ไม่มีขีดจำกัดฝั่งเซิร์ฟเวอร์ — เครื่องมือทำงานทั้งหมดในเบราว์เซอร์ของคุณ ขีดจำกัดเชิงปฏิบัติขึ้นอยู่กับหน่วยความจำของเบราว์เซอร์ สำหรับอินพุตขนาดใหญ่มากหรือการประมวลผลแบบชุด ให้ใช้ encodeURIComponent ในสคริปต์แทน