เครื่องมือเข้ารหัส URL: เข้ารหัสอักขระพิเศษในลิงก์ URL ออนไลน์ฟรี
เครื่องมือเข้ารหัสสตริง URL ฟรีเพื่อเข้ารหัสอักขระพิเศษทันที แปลงช่องว่าง Unicode และสัญลักษณ์เป็นรูปแบบเปอร์เซ็นต์เข้ารหัส เหมาะสำหรับ API แบบฟอร์มเว็บ และ URL นานาชาติ ลองเลยตอนนี้!
เครื่องมือเข้ารหัสสตริง URL
เอกสารประกอบการใช้งาน
การเข้ารหัส URL: คืออะไรและทำงานอย่างไร
การเข้ารหัส URL หรือที่เรียกว่าการเข้ารหัสแบบเปอร์เซ็นต์ เป็นวิธีแสดงอักขระในที่อยู่เว็บโดยใช้เฉพาะชุดอักขระ ASCII ที่ปลอดภัยขนาดเล็ก วิธีนี้ทำงานโดยแทนที่อักขระที่ไม่ปลอดภัยด้วยเครื่องหมาย % ตามด้วยเลขฐานสิบหกสองหลัก เครื่องมือหลีกอักขระสตริง URL นี้เข้ารหัสข้อความในลักษณะเดียวกับฟังก์ชัน encodeURIComponent ในตัวของ JavaScript
เหตุใด URL จึงต้องเข้ารหัส
URL อนุญาตให้มีอักขระได้เพียงชุดจำกัด ได้แก่ ตัวอักษร ตัวเลข และเครื่องหมายวรรคตอนจำนวนหนึ่ง ช่องว่าง ตัวอักษรที่มีเครื่องหมายกำกับ อักขระจากอักษรที่ไม่ใช่ละติน และสัญลักษณ์อย่าง & หรือ = อาจทำให้ URL ใช้งานไม่ได้หรือเปลี่ยนความหมาย หากปรากฏใน URL โดยไม่เข้ารหัส ตัวอย่างเช่น ช่องว่างภายในลิงก์อาจทำให้เบราว์เซอร์หรือเซิร์ฟเวอร์อ่าน URL เป็นสองส่วนแยกกัน การเข้ารหัสแบบเปอร์เซ็นต์จะแทนที่อักขระเหล่านี้ด้วยรหัสที่เบราว์เซอร์และเซิร์ฟเวอร์ทุกแห่งอ่านได้เหมือนกัน
อักขระที่เครื่องมือนี้ไม่เปลี่ยนแปลง
เครื่องมือนี้จะไม่แตะต้องอักขระต่อไปนี้ อักขระเหล่านี้จะถูกส่งผ่านไปโดยตรง:
- ตัวอักษรพิมพ์ใหญ่และพิมพ์เล็ก:
A–Z,a–z - ตัวเลข:
0–9 - เครื่องหมายวรรคตอน
-._~!*'()
อักขระอื่นทุกตัวจะถูกเข้ารหัสแบบเปอร์เซ็นต์ ได้แก่:
- อักขระช่องว่างและเครื่องหมายวรรคตอน เช่น
:/?#[]@$&+,;= - ตัวอักษรที่มีเครื่องหมายกำกับและอักขระอื่นใดที่ไม่ใช่ ASCII หรือเป็น Unicode
- อักขระ
%ตามตัวอักษรเอง ซึ่งจะกลายเป็น%25เสมอ แม้เดิมจะเป็นส่วนหนึ่งของลำดับที่เข้ารหัสแบบเปอร์เซ็นต์อยู่แล้ว
คู่มือไวยากรณ์ URL ทั่วไปบางฉบับจัดกลุ่ม ! * ' ( และ ) ไว้กับเครื่องหมายวรรคตอนอื่น ๆ ในฐานะอักขระที่ “อาจต้องเข้ารหัส” ในบางบริบท เครื่องมือเฉพาะนี้จะไม่เข้ารหัสอักขระเหล่านี้ เพราะใช้ชุดกฎของ encodeURIComponent ซึ่งถือว่าอักขระเหล่านี้ปลอดภัย
วิธีคำนวณสตริงที่เข้ารหัสแบบเปอร์เซ็นต์ (สูตร)
เครื่องมือจะตรวจสอบอักขระแต่ละตัวของข้อมูลนำเข้าทีละตัว แล้วใช้กฎต่อไปนี้:
- หากอักขระนั้นอยู่ในกลุ่มอักขระที่ไม่เปลี่ยนแปลงตามที่ระบุไว้ข้างต้น ให้คงอักขระนั้นไว้ตามเดิม
- มิฉะนั้น ให้แปลงอักขระนั้นเป็นลำดับไบต์แบบ UTF-8 ตัวอักษรละตินที่มีเครื่องหมายกำกับ ตัวอักษรกรีก ซีริลลิก และอาหรับใช้สองไบต์ ส่วนอักขระจีน ญี่ปุ่น และเกาหลีใช้สามไบต์ อีโมจิใช้สี่ไบต์
- เขียนไบต์แต่ละตัวเป็นเลขฐานสิบหกสองหลัก
- ใส่
%ไว้หน้าเลขฐานสิบหกแต่ละคู่ - นำผลลัพธ์มาต่อกันตามลำดับเพื่อสร้างสตริงที่เข้ารหัส
ตัวอย่างพร้อมวิธีทำ
ข้อมูลนำเข้า: Jürgen & Björk
การประมวลผลทีละอักขระ:
| อักขระ | ผลลัพธ์ |
|---|---|
J | J (ไม่เปลี่ยนแปลง) |
ü | %C3%BC (ไบต์ UTF-8 0xC3, 0xBC) |
rgen | rgen (ไม่เปลี่ยนแปลง) |
(ช่องว่าง) | %20 |
& | %26 |
(ช่องว่าง) | %20 |
Bj | Bj (ไม่เปลี่ยนแปลง) |
ö | %C3%B6 (ไบต์ UTF-8 0xC3, 0xB6) |
rk | rk (ไม่เปลี่ยนแปลง) |
ผลลัพธ์: J%C3%BCrgen%20%26%20Bj%C3%B6rk
ตัวอย่างที่สองแสดงการทำงานของชุดอักขระที่ไม่เปลี่ยนแปลง การเข้ารหัสสตริง -_.!~*'() จะได้ -_.!~*'() ซึ่งเป็นข้อความเดิมทุกประการ เพราะอักขระทุกตัวอยู่ในกลุ่มอักขระที่ไม่ต้องเข้ารหัส การเข้ารหัสสตริง 100% จะได้ 100%25 เพราะเครื่องหมาย % เองไม่ใช่อักขระที่ปลอดภัย
การถอดรหัสสตริงที่เข้ารหัสแบบเปอร์เซ็นต์
การถอดรหัสเป็นกระบวนการย้อนกลับ แต่ละลำดับ %XX จะถูกอ่านเป็นไบต์ฐานสิบหก จากนั้นจึงจัดกลุ่มไบต์กลับเป็นอักขระ UTF-8 เดิม และแทนที่ลำดับดังกล่าวด้วยอักขระนั้น ตัวอย่างเช่น %C3%BC จะถูกถอดรหัสกลับเป็น ü และ %20 จะถูกถอดรหัสกลับเป็นช่องว่าง เครื่องมือนี้เข้ารหัสได้เท่านั้น หากต้องการย้อนกระบวนการต้องใช้เครื่องมือถอดรหัสแยกต่างหาก
การใช้งานทั่วไป
การเข้ารหัสแบบเปอร์เซ็นต์ใช้เมื่อใดก็ตามที่ข้อความซึ่งผู้ใช้พิมพ์เอง ไม่ใช่ข้อความที่โปรแกรมเมอร์เขียนไว้ ต้องกลายเป็นส่วนหนึ่งของ URL:
- ช่องค้นหาที่นำคำค้นไปใส่ในแถบที่อยู่ เช่น
?q=shoes%20%26%20bags - พารามิเตอร์คำค้นที่เก็บชื่อ ที่อยู่ หรือข้อมูลผู้ใช้อื่น ๆ
- ลิงก์ไปยังหน้าที่มีชื่อเรื่องเป็นภาษาซึ่งใช้อักษรที่มีเครื่องหมายกำกับหรืออักษรที่ไม่ใช่ละติน
- คำขอ API ที่ส่งโทเค็นหรือตัวระบุเป็นส่วนหนึ่งของ URL
ตัวอย่างโค้ด
1// JavaScript
2encodeURIComponent("Jürgen & Björk");
3// "J%C3%BCrgen%20%26%20Bj%C3%B6rk"
41# Python
2import urllib.parse
3urllib.parse.quote("Jürgen & Björk", safe="!*'()")
4# 'J%C3%BCrgen%20%26%20Bj%C3%B6rk'
5quote ของ Python จะคงตัวอักษร ตัวเลข และ - . _ ~ ไว้เสมอ อักขระเพิ่มเติมอีกห้า
ตัว ได้แก่ ! * ' ( ) ต้องระบุไว้ใน safe จึงจะตรงกับเครื่องมือนี้ หากไม่มี
อักขระเหล่านี้ quote จะคืนค่าเป็น %21 %2A %27 %28 %29 แทน
ความเป็นมา
แนวคิดเรื่องการเข้ารหัสอักขระที่ไม่ปลอดภัยใน URL ย้อนไปถึง RFC 1738 ในปี (4,410 ซม.) 1994 ซึ่งเป็นเอกสารฉบับแรก ๆ ที่กำหนดรูปแบบ URL ต่อมา RFC 3986 ซึ่งเผยแพร่ในปี 2005 ได้ปรับปรุงกฎและกำหนดอย่างเป็นทางการถึงกลุ่มอักขระ “ที่ไม่ต้องเข้ารหัส” encodeURIComponent ซึ่งเป็นฟังก์ชัน JavaScript ที่เครื่องมือนี้ใช้ ยึดตามกลุ่มอักขระที่ไม่ต้องเข้ารหัสซึ่งกว้างกว่า RFC 3986 เล็กน้อย โดยยังคง ! * ' ( และ ) ไว้โดยไม่เข้ารหัส ตามข้อกำหนด URI ฉบับก่อนหน้า
คำถามที่พบบ่อย
การเข้ารหัส URL กับการหลีกอักขระใน URL แตกต่างกันอย่างไร
ทั้งสองคำหมายถึงสิ่งเดียวกัน กล่าวคือการเข้ารหัสแบบเปอร์เซ็นต์ ซึ่งแทนที่อักขระด้วย % ตามด้วยเลขฐานสิบหกสองหลัก
เหตุใด !, *, ', ( และ ) จึงไม่เปลี่ยนแปลงในเครื่องมือนี้
เครื่องมือนี้ใช้ encodeURIComponent ซึ่งถือว่าอักขระทั้งห้าตัวนี้ปลอดภัยและคงไว้ตรงตามที่พิมพ์ ฟังก์ชันเข้ารหัสอื่นและเซิร์ฟเวอร์บางแห่งอาจยังคาดหมายให้อักขระเหล่านี้ถูกเข้ารหัส ดังนั้นควรตรวจสอบระบบปลายทางหากเกิดปัญหา
%20 กับ + สำหรับช่องว่างแตกต่างกันอย่างไร
ทั้งสองใช้แทนช่องว่าง %20 คือการเข้ารหัสแบบเปอร์เซ็นต์ทั่วไปสำหรับช่องว่าง ส่วนเครื่องหมาย + เป็นกรณีพิเศษที่ใช้เฉพาะภายในข้อมูล application/x-www-form-urlencoded ซึ่งเป็นรูปแบบที่ใช้ในการส่งแบบฟอร์ม HTML ไม่ใช่โดยเครื่องมือนี้
เครื่องมือนี้ถอดรหัสข้อความที่เข้ารหัสไว้แล้วหรือไม่
ไม่ เครื่องมือนี้เข้ารหัสได้เท่านั้น หากข้อมูลนำเข้ามีเครื่องหมาย % อยู่แล้ว เครื่องหมาย % นั้นจะถูกถือเป็นอักขระตามตัวอักษรและกลายเป็น %25 ในผลลัพธ์ แทนที่จะคงไว้ตามเดิม
อักขระที่ไม่ใช่ละติน เช่น ข้อความภาษาจีนหรืออาหรับ ได้รับการจัดการอย่างไร
อักขระแต่ละตัวจะถูกแปลงเป็นลำดับไบต์ UTF-8 ก่อน จากนั้นไบต์ทุกตัวจะถูกเข้ารหัสแบบเปอร์เซ็นต์ อักขระจีนหนึ่งตัวใช้สามไบต์ จึงให้ผลเป็นกลุ่ม %XX สามกลุ่ม ตัวอักษรอาหรับหนึ่งตัวใช้สองไบต์ จึงให้ผลเป็นสองกลุ่ม
เครื่องมือจะปฏิเสธการเข้ารหัสข้อความเมื่อใด เฉพาะเมื่อข้อความมีครึ่งหนึ่งของคู่ surrogate คู่ surrogate คือรหัสสองส่วนที่ใช้เก็บอักขระซึ่งมีค่ามากกว่า U+FFFF เช่น อีโมจิ ครึ่งหนึ่งที่อยู่เดี่ยว ๆ ไม่มีรูปแบบ UTF-8 ที่ถูกต้อง เครื่องมือจึงแสดงข้อผิดพลาดแทนผลลัพธ์ การพิมพ์ตามปกติไม่สามารถสร้างกรณีนี้ได้ โดยทั่วไปมักเกิดจากการคัดลอกข้อมูลที่ถูกตัดทอนหรือลิงก์ที่เสียหาย
ควรเข้ารหัส URL ทั้งหมดหรือเพียงบางส่วน
ให้เข้ารหัสเฉพาะส่วนที่เก็บข้อมูลผู้ใช้ เช่น ค่าคำค้นหรือส่วนของเส้นทาง ไม่ใช่ส่วนที่ประกอบเป็นโครงสร้างของ URL เช่น https:// และชื่อโดเมน การเข้ารหัส URL ทั้งหมดด้วยตัวเข้ารหัสส่วนประกอบจะเปลี่ยนอักขระ :, / และ ? ให้เป็นรหัสเปอร์เซ็นต์ด้วย ทำให้ที่อยู่นั้นใช้งานไม่ได้