การถอดรหัส URL คืออะไร?
การถอดรหัส URL (percent-decoding) คือกระบวนการย้อนกลับของการเข้ารหัส URL: แปลงลำดับที่เข้ารหัสด้วย percent กลับเป็นอักขระเดิม ทุกครั้งที่มีเครื่องหมายเปอร์เซ็นต์ตามด้วยตัวเลขฐานสิบหกสองหลัก (%XX) จะถูกแทนที่ด้วยไบต์ที่ XX แสดง ไบต์ที่เข้ารหัสหลายตัวติดกันจะถูกรวมกันเพื่อสร้างอักขระ UTF-8 เดิมขึ้นมาใหม่
การถอดรหัส URL เป็นงานประจำวันของนักพัฒนาที่ทำงานกับ API การขูดเว็บ การวิเคราะห์ log และกระบวนการยืนยันตัวตน URL ที่เข้ารหัสอ่านได้โดยเครื่องแต่ทึบแสงสำหรับมนุษย์ — การถอดรหัสจะเปิดเผยพาธจริง คำค้นหา เป้าหมายการเปลี่ยนเส้นทาง และค่าพารามิเตอร์ทันที ซึ่งจะต้องใช้การแปลง hex เป็นอักขระด้วยจิตใจหากไม่มีเครื่องมือนี้
ทำไมต้องใช้เครื่องมือนี้?
ทำความเข้าใจ URL หรือ query string ที่เข้ารหัส percent ได้อย่างรวดเร็ว — ไม่ต้องใช้ console เบราว์เซอร์ ไม่มีอะไรถูกส่งไปยังเซิร์ฟเวอร์
⚡ถอดรหัสทันที
วาง URL หรือพารามิเตอร์ที่เข้ารหัสแล้วดูเวอร์ชันที่มนุษย์อ่านได้ทันที เหมาะสำหรับการดีบัก API request และไฟล์ log
🛡️การกู้คืนข้อผิดพลาด
ถอยไปใช้ legacy unescape() สำหรับอินพุตที่มีอักขระ Latin-1 แบบ percent-encoded แบบเก่าที่จะล้มเหลวกับ decodeURIComponent
🔒ฝั่งไคลเอนต์เท่านั้น
การถอดรหัสทั้งหมดทำงานในเครื่องในเบราว์เซอร์ของคุณ โทเค็น รหัสผ่าน และพารามิเตอร์ query ส่วนตัวไม่เคยออกจากอุปกรณ์ของคุณ
🔁รองรับ URL เต็ม
ถอดรหัส URL เต็มหรือค่าพารามิเตอร์แต่ละตัว เครื่องมือจัดการทั้งช่องว่าง %20 มาตรฐานและเก็บรักษาเครื่องหมาย + เป็นอักขระบวกตามตัวอักษร
วิธีใช้เครื่องมือถอดรหัส URL ออนไลน์นี้
ไม่ต้องมีบัญชี ไม่ต้องติดตั้ง วางสตริงที่เข้ารหัสด้วยเปอร์เซ็นต์ลงในช่องป้อนข้อมูล แล้วผลลัพธ์ที่ถอดรหัสแล้วจะปรากฏทันที ทุกอย่างทำงานในเบราว์เซอร์ของคุณ — ข้อมูลของคุณไม่เคยออกจากอุปกรณ์
- 1
วาง URL ที่เข้ารหัสหรือสตริงของคุณ
คัดลอกสตริงที่เข้ารหัสด้วยเปอร์เซ็นต์ใด ๆ — URL จากแถบที่อยู่ของเบราว์เซอร์, พารามิเตอร์คิวรีจาก server log, การตอบสนอง API หรือเป้าหมายการเปลี่ยนเส้นทาง — แล้ววางลงในช่องป้อนข้อมูล
- 2
การตรวจจับรูปแบบอัตโนมัติ
ตัวถอดรหัสจัดการกับทั้งการเข้ารหัสเปอร์เซ็นต์ %XX และ + เป็นช่องว่าง (application/x-www-form-urlencoded) โดยอัตโนมัติ ไม่จำเป็นต้องระบุรูปแบบการเข้ารหัสด้วยตนเอง
- 3
ตรวจสอบผลลัพธ์ที่ถอดรหัสแล้ว
ข้อความที่อ่านได้จะปรากฏทันที หากอินพุตมีการเข้ารหัสซ้อน (สตริงที่เข้ารหัสสองชั้น) ตัวถอดรหัสจะแก้ไขทีละชั้น ข้อผิดพลาดจะปรากฏสำหรับลำดับ %XX ที่ผิดรูปแบบ
- 4
คัดลอกหรือเข้ารหัสใหม่
คลิก คัดลอก เพื่อนำสตริงที่ถอดรหัสแล้ว ต้องการเข้ารหัสอีกครั้งด้วยการตั้งค่าที่ต่างกัน? สลับไปที่เครื่องมือ URL Encoder ด้วยคลิกเดียว
การถอดรหัสทำงานอย่างไร
ตัวถอดรหัสสแกนอินพุตเพื่อหาลำดับ % แปลงแต่ละกลุ่มตัวเลขฐานสิบหกสองหลักเป็นค่าไบต์ จัดกลุ่มลำดับไบต์ที่ต่อเนื่องกัน และตีความเป็น UTF-8 เพื่อสร้างอักขระ Unicode สุดท้าย
ตัวอย่าง
อินพุต:https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dhello%20world
%3A → : %2F → / %3F → ? %3D → = %20 → space
เอาต์พุต:https://example.com/search?q=hello world
ตารางอ้างอิงอักขระที่เข้ารหัส Percent
ตารางอ้างอิงเร็วสำหรับลำดับ percent-encoded ที่พบบ่อยที่สุด:
| เข้ารหัสแล้ว | อักขระ | คุณจะพบที่ไหน |
|---|
| %20 | space | path segments, query values |
| %2B | + | literal plus (not a space in query) |
| %2F | / | slash inside a path component |
| %3F | ? | literal question mark in a value |
| %23 | # | literal hash in a value |
| %26 | & | literal ampersand in a value |
| %3D | = | literal equals sign in a value |
| %40 | @ | at sign in username / password |
| %3A | : | colon inside a path segment |
| %25 | % | literal percent sign |
| %2C | , | comma in path or query |
| %5B | [ | opening bracket |
| %5D | ] | closing bracket |
| %7B | { | curly brace in template literals |
| %7D | } | curly brace in template literals |
กรณีใช้งานทั่วไป
การดีบัก API Request
คัดลอก URL จาก log เครือข่ายของ DevTools เบราว์เซอร์และถอดรหัสเพื่อดูค่าพารามิเตอร์ query จริง — มีประโยชน์เป็นพิเศษเมื่อเครื่องมืออัตโนมัติหรือไลบรารีได้ percent-encode พารามิเตอร์ไว้
การอ่านไฟล์ Log
Log การเข้าถึงเว็บเซิร์ฟเวอร์และ log แอปพลิเคชันเก็บ URL ในรูปแบบที่เข้ารหัส ถอดรหัสเพื่อค้นหาพาธที่ร้องขอจริง คำค้นหา และค่าพารามิเตอร์
การตรวจสอบการเปลี่ยนเส้นทาง
Callback OAuth การเปลี่ยนเส้นทาง SSO และ URL การติดตามลิงก์มักมีพารามิเตอร์ redirect_uri หรือ next ที่เข้ารหัสมาก ถอดรหัส URL เพื่อติดตามปลายทางที่ตั้งใจ
การแยกวิเคราะห์ Webhook Payload
เนื้อหา webhook ที่ส่งเป็น application/x-www-form-urlencoded (Stripe, Twilio, GitHub) มาเป็นสตริง percent-encoded ถอดรหัสเพื่ออ่านค่าฟิลด์จริง
การดึงคำค้นหา
URL analytics และ header referrer มีคำค้นหาเดิมของผู้ใช้ที่เข้ารหัส percent ในพารามิเตอร์ q= ถอดรหัสเพื่อแสดงหรือวิเคราะห์คำค้นหาจริง
วิศวกรรมย้อนกลับ URL
เมื่อผสานรวมกับ API ของบุคคลที่สามหรือทำการขูด URL ที่พบมักมีเซกเมนต์พาธและพารามิเตอร์ที่เข้ารหัส ถอดรหัสเพื่อเข้าใจโครงสร้าง URL และสร้าง request ซ้ำ
ข้อผิดพลาดทั่วไป
นี่คือข้อผิดพลาดที่บ่อยที่สุดเมื่อถอดรหัสสตริงที่เข้ารหัด percent:
✕สับสน + กับ %20
ในข้อมูล application/x-www-form-urlencoded (การส่งฟอร์ม HTML) + แสดงช่องว่าง แต่ใน URL path ดิบหรือค่าที่เข้ารหัสด้วย encodeURIComponent + คือเครื่องหมายบวกตามตัวอักษร decodeURIComponent ไม่แปลง + เป็นช่องว่าง — ใช้ URLSearchParams หรือ unquote_plus สำหรับข้อมูลฟอร์ม
✕สตริงที่เข้ารหัสสองครั้ง
ถ้าสตริงถูกเข้ารหัสสองครั้ง การถอดรหัสครั้งเดียวยังคงเหลือเครื่องหมาย percent: %2520 ถอดรหัสเป็น %20 ไม่ใช่ช่องว่าง ถอดรหัสอีกครั้งเพื่อรับค่าเดิม ระวังสิ่งนี้ใน log พร็อกซี และมิดเดิลแวร์ที่เข้ารหัสข้อมูลที่เข้ารหัสไว้แล้วซ้ำ
✕ลำดับ Percent ที่มีรูปแบบผิด
% เดี่ยวหรือ % ตามด้วยอักขระที่ไม่ใช่ hex (เช่น %GG หรือ % 2) ไม่ถูกต้องและจะ throw URIError ตรวจสอบอินพุตเสมอหรือห่อการถอดรหัสใน try/catch
✕ไม่ตรงกันของการเข้ารหัส (Latin-1 เทียบกับ UTF-8)
ระบบเก่า (urlencode ของ PHP, ASP แบบคลาสสิก) เข้ารหัสอักขระเป็นไบต์ Latin-1 สตริงที่เข้ารหัสเป็น Latin-1 อาจถอดรหัสไม่ถูกต้องด้วยตัวถอดรหัส UTF-8 ถ้าเห็นอักขระที่ผิดพลาด ลองเส้นทาง legacy unescape() หรือกำหนดการเข้ารหัสเดิม
ตัวอย่างโค้ด
วิธีถอดรหัสสตริง URL ในภาษาและสภาพแวดล้อมยอดนิยม:
JavaScript (browser / Node.js)
// Decode a percent-encoded component
decodeURIComponent('hello%20world%20%26%20more') // → "hello world & more"
// Decode a full URL (leaves structure characters encoded)
decodeURI('https://example.com/path?q=hello%20world') // → "https://example.com/path?q=hello world"
// Parse a query string (handles + as space automatically)
const params = new URLSearchParams('q=hello+world&lang=en')
params.get('q') // → "hello world"Python
from urllib.parse import unquote, unquote_plus, parse_qs
# Decode percent-encoded string
unquote('hello%20world%20%26%20more') # → 'hello world & more'
# Decode form-encoded string (+ → space)
unquote_plus('hello+world%21') # → 'hello world!'
# Parse full query string
parse_qs('q=hello%20world&lang=en') # → {'q': ['hello world'], 'lang': ['en']}Node.js (URL API)
const url = new URL('https://example.com/search?q=hello%20world%20%26%20more')
url.searchParams.get('q') // → "hello world & more"
url.pathname // → "/search"CLI (bash)
# Decode with Python one-liner
python3 -c "from urllib.parse import unquote; print(unquote('hello%20world'))"
# Decode with Node.js
node -e "console.log(decodeURIComponent('hello%20world%20%26'))"URL Decoder กับทางเลือกอื่น
มีหลายเครื่องมือที่สามารถถอดรหัสสตริงที่เข้ารหัสด้วยเปอร์เซ็นต์ได้ แต่แตกต่างกันในด้านความชัดเจน ความเป็นส่วนตัว และความสะดวก
เครื่องมือนี้
ทำงานในเบราว์เซอร์ ทันที ปลอดภัย จัดการกับการเข้ารหัส %XX, + เป็นช่องว่าง, Unicode และลำดับที่ผิดรูปแบบ ไม่มีการส่งข้อมูลไปยังเซิร์ฟเวอร์ใด ๆ
แถบที่อยู่ของเบราว์เซอร์
เบราว์เซอร์ถอดรหัส URL เพื่อแสดงผล แต่ไม่เสมอไปอย่างสมบูรณ์ — บางอักขระที่เข้ารหัสอาจยังคงมองเห็นได้ในแถบที่อยู่ ไม่มีประโยชน์สำหรับการตรวจสอบค่าพารามิเตอร์แต่ละตัว
DevTools / curl -v
DevTools ของเบราว์เซอร์และ curl แสดง URL แบบดิบและที่ถอดรหัสแล้วในคำขอเครือข่าย มีประโยชน์สำหรับการดีบัก แต่ต้องสลับเครื่องมือและรู้ว่าจะดูที่ไหน
คำถามที่พบบ่อย
ความแตกต่างระหว่าง decodeURIComponent กับ decodeURI คืออะไร?
decodeURIComponent ถอดรหัสลำดับ percent-encoded ทั้งหมดรวมถึงอักขระสงวน (%2F → /, %3F → ?, ฯลฯ) decodeURI ถอดรหัสเฉพาะลำดับที่ไม่ทำให้เกิดอักขระที่มีความหมายพิเศษใน URL — ปล่อย %2F, %3F, %23 และอักขระโครงสร้างอื่นๆ ให้เข้ารหัสอยู่ ใช้ decodeURIComponent สำหรับค่าพารามิเตอร์; ใช้ decodeURI เฉพาะเมื่อมี URL เต็มและต้องการรักษาโครงสร้าง
ทำไมถึงเห็น URIError: malformed URI?
ข้อผิดพลาดนี้จาก decodeURIComponent เกิดขึ้นเมื่ออินพุตมี % ที่ไม่ตามด้วยตัวเลขฐานสิบหกที่ถูกต้องสองหลัก หรือเมื่อลำดับ UTF-8 หลายไบต์ไม่สมบูรณ์ (เช่น %E2 โดยไม่มี %82%AC ตามมา) ลบหรือ escape เครื่องหมาย percent ที่โดดเดี่ยวก่อนถอดรหัส
การถอดรหัสจัดการ + เป็นช่องว่างหรือไม่?
ไม่ — decodeURIComponent ถือ + เป็นเครื่องหมายบวกตามตัวอักษรไม่ใช่ช่องว่าง ข้อตกลง + → ช่องว่างใช้ได้เฉพาะกับข้อมูล application/x-www-form-urlencoded (การส่งฟอร์ม HTML) เพื่อถอดรหัสข้อมูลที่เข้ารหัสฟอร์ม ให้ใช้ URLSearchParams (เบราว์เซอร์/Node) หรือ urllib.parse.unquote_plus (Python)
การถอดรหัส URL ฝั่งไคลเอนต์ปลอดภัยหรือไม่?
ใช่ — การถอดรหัส URL เป็นการแปลงล้วนๆ ที่ไม่มี network request เบราว์เซอร์สมัยใหม่ทั้งหมดมี decodeURIComponent และ decodeURI เป็นฟังก์ชันดั้งเดิม เครื่องมือนี้ทำการถอดรหัสในเบราว์เซอร์ของคุณทั้งหมด ไม่มีข้อมูลถูกส่งไปที่ใด
จะถอดรหัส URL ที่ถูกเข้ารหัสหลายครั้งอย่างไร?
ถอดรหัสหลายครั้งจนกว่าเอาต์พุตจะเสถียร (ไม่มีลำดับ % ที่ถูกแก้ไขอีก) สิ่งนี้เกิดขึ้นเมื่อ URL ที่เข้ารหัสแล้วถูกส่งผ่านตัวเข้ารหัสอื่น การถอดรหัสแต่ละรอบจะลบชั้นการเข้ารหัสหนึ่งชั้น
%XX แสดงอะไร?
สองอักขระหลัง % คือตัวเลขฐานสิบหกที่แสดงค่าไบต์เดี่ยว (00–FF) สำหรับอักขระ ASCII ไบต์นี้คือรหัส ASCII ของอักขระ: %41 = 65 = 'A' สำหรับอักขระที่ไม่ใช่ ASCII ลำดับ %XX หลายตัวแสดงลำดับไบต์ UTF-8 ของอักขระ: สัญลักษณ์ยูโรคือ %E2%82%AC (สามไบต์: 0xE2, 0x82, 0xAC)
เบราว์เซอร์ใช้การเข้ารหัสใดเมื่อส่งแบบฟอร์ม HTML?
แบบฟอร์ม HTML ที่มี method=GET จะเพิ่มฟิลด์ต่อท้าย URL โดยใช้การเข้ารหัส application/x-www-form-urlencoded ซึ่งแทนที่ช่องว่างด้วย + แทน %20 และเข้ารหัสเปอร์เซ็นต์สำหรับอักขระพิเศษอื่นๆ ตัวเลือก + → ช่องว่างในเครื่องมือ URL Decode จัดการรูปแบบนี้ แบบฟอร์มที่มี method=POST และ enctype=application/x-www-form-urlencoded ใช้รูปแบบเดียวกันในเนื้อหาคำขอ
มีขีดจำกัดขนาดสำหรับการถอดรหัสหรือไม่?
ไม่มีขีดจำกัดฝั่งเซิร์ฟเวอร์ — เครื่องมือทำงานทั้งหมดในเบราว์เซอร์ของคุณ ขีดจำกัดเชิงปฏิบัติขึ้นอยู่กับหน่วยความจำของเบราว์เซอร์ สำหรับสตริงที่เข้ารหัสยาวมากหรือการประมวลผลแบบชุด ให้ใช้ decodeURIComponent ในสคริปต์แทน