การเข้ารหัส URL
การเน้นเป็นเปอร์เซ็นต์ที่ประมวลผลได้
เครื่องมือเข้ารหัส/ถอดรหัส URL ออนไลน์ฟรี รองรับ 4 โหมด encodeURIComponent/encodeURI/RFC 3986 เน้นอักขระที่เข้ารหัสแบบเรียลไทม์ โหมดแบตช์หลายบรรทัด Query Only สำหรับเข้ารหัสเฉพาะค่าพารามิเตอร์ ประมวลผลในเบราว์เซอร์ ไม่อัปโหลดข้อมูล
คำแนะนำที่เกี่ยวข้อง
การเข้ารหัส URL คืออะไร?
การเข้ารหัส URL (เปอร์เซ็นต์-เอ็นโค้ดดิ้ง) คือกระบวนการแปลงอักขระที่ไม่ปลอดภัยใน URL เป็นรูปแบบ %XX URL สามารถมีอักขระ ASCII ย่อยเพียงเล็กน้อยเท่านั้น (ตัวอักษร ตัวเลข -_.~) อักขระอื่นๆ ทั้งหมด (รวมถึงจีน ช่องว่าง อักขระพิเศษ) ต้องถูกเข้ารหัสก่อนส่งใน URL ตัวอย่างเช่น ช่องว่างเป็น %20 อักขระจีน '中' เป็น %E4%B8%AD
**encodeURIComponent vs encodeURI**: นี่คือฟังก์ชันการเข้ารหัสสองตัวที่ใช้บ่อยที่สุด encodeURIComponent เข้ารหัสอย่างละเอียดมากขึ้น รวมถึงตัวคั่นพารามิเตอร์เช่น &, =, ? ดังนั้นเหมาะสำหรับเข้ารหัสค่าพารามิเตอร์แต่ละค่า encodeURI รักษาโครงสร้าง URL (scheme://, เส้นทาง, /, ?, #) ดังนั้นเหมาะสำหรับเข้ารหัส URL เต็ม การใช้งานที่ไม่ถูกต้องนำไปสู่ข้อผิดพลาดในการแยกวิเคราะห์พารามิเตอร์
**RFC 3986 vs มาตรฐานเก่า**: RFC 3986 ถือว่าทิลดา ~ เป็นอักขระปลอดภัยที่ไม่จำเป็นต้องเข้ารหัส ในขณะที่มาตรฐานแรกๆ เข้ารหัสเป็น %7E การใช้ RFC 3986 ช่วยลดการเอสเคปที่ไม่จำเป็น ปรับปรุงความสามารถในการอ่าน URL และหลีกเลี่ยงปัญหาการแยกวิเคราะห์ %7E บนเซิร์ฟเวอร์บางแห่ง
**โหมด Query Only**: ใช้เมื่อคุณต้องการเข้ารหัสเฉพาะค่าพารามิเตอร์ใน query string URL โดยไม่เปลี่ยนชื่อคีย์ เครื่องหมายเท่ากับ และอักขระ & ตัวอย่างเช่น ?name=张三 ถูกเข้ารหัสเป็น ?name=%E5%BC%A0%E4%B8%89 ทำให้ชื่อคีย์ยังคงอ่านได้และเข้ารหัสเฉพาะค่า
**การเน้นการเข้ารหัส**: เน้นอักขระในรูปแบบ %XX ด้วยสีอำพันแบบเรียลไทม์ เพื่อให้ผู้ใช้สามารถเห็นทันทีว่าอักขระใดถูกเข้ารหัส สิ่งนี้ช่วยให้เข้าใจกฎการเข้ารหัส: ตัวอักษรและตัวเลขมักเป็นอักขระปลอดภัยที่ไม่ถูกเข้ารหัส เฉพาะจีนและอักขระพิเศษเท่านั้นที่ถูกเข้ารหัส การคำนวณทั้งหมดทำในเบราว์เซอร์แบบโลคัล ไม่มีข้อมูลถูกอัปโหลด
กรณีการใช้งาน
- ดีบักพารามิเตอร์ API: เปรียบเทียบผลลัพธ์ของ encodeURIComponent และ encodeURI เพื่อแก้ไขปัญหาลายเซ็นอินเทอร์เฟซไม่ตรงกัน
- ถอดรหัสล็อก: ถอดรหัสเนื้อหาที่เข้ารหัส URL ในล็อกแบบแบตช์เพื่อกู้คืนข้อความที่อ่านได้
- สร้าง URL: โหมด Query Only รักษาชื่อคีย์และเข้ารหัสเฉพาะค่า หลีกเลี่ยงข้อผิดพลาดรูปแบบเมื่อเชื่อมต่อสตริงด้วยตนเอง
- พัฒนาฟรอนต์เอนด์: การเน้นช่วยให้เข้าใจว่าอักขระใดถูกเอสเคป มีประโยชน์สำหรับดีบักการเปลี่ยนเส้นทางหน้า
- ย้ายข้อมูล: ประมวลผลข้อมูลที่เข้ารหัส URL ที่ส่งออกจากระบบเก่าแบบแบตช์เพื่อแปลงเป็นรูปแบบใหม่
วิธีการใช้งาน
- ป้อนหรือวาง URL หรือข้อความที่ต้องการเข้ารหัส/ถอดรหัส
- เลือกทิศทางการเข้ารหัส (เข้ารหัส/ถอดรหัส) และโหมด (Component / URI / full / RFC 3986)
- เปิดโหมดแบตช์สำหรับข้อมูลหลายบรรทัดหรือ Query Only สำหรับเข้ารหัสเฉพาะค่าพารามิเตอร์
- ตรวจสอบผลลัพธ์ที่เน้นและคัดลอกสตริงที่เข้ารหัสเพื่อใช้ในการเรียก API หรือสร้าง URL
คุณสมบัติ
- 4 โหมดการเข้ารหัส: สลับระหว่าง encodeURIComponent / encodeURI / full / RFC 3986 ด้วยคลิกเดียว เปรียบเทียบความแตกต่างของผลลัพธ์แบบเรียลไทม์
- การเน้นการเข้ารหัส: เน้นอักขระ %XX ที่ถูกเอสเคปแบบเรียลไทม์ การทำเครื่องหมายสีอำพันทำให้ผลลัพธ์การเข้ารหัสเห็นได้ทันที
- โหมดแบตช์: รองรับการเข้ารหัส/ถอดรหัสแบตช์หลายบรรทัด แต่ละบรรทัดถูกประมวลผลอย่างอิสระ เหมาะสำหรับล็อกหรือข้อมูลจำนวนมาก
- โหมด Query Only: เข้ารหัสเฉพาะส่วนค่าพารามิเตอร์ของ URL (หลังเครื่องหมายเท่ากับ) ทำให้ชื่อคีย์ อักขระ และโครงสร้างเส้นทางไม่เปลี่ยนแปลง
- ดีบาวน์แบบเรียลไทม์: เข้ารหัส/ถอดรหัสอัตโนมัติภายใน 300 มิลลิวินาที ไม่ต้องคลิกปุ่ม ผลลัพธ์ปรากฏขณะพิมพ์
- นับอักขระ: แสดงจำนวนอักขระที่ป้อนแบบเรียลไทม์ มีประโยชน์สำหรับตรวจสอบขีดจำกัดความยาวพารามิเตอร์ API
ตัวอย่างโค้ด
การเข้ารหัส/ถอดรหัส URL ใน JavaScript
// encodeURIComponent: เข้ารหัสค่าพารามิเตอร์แต่ละค่า (ใช้บ่อยที่สุด)
const param = encodeURIComponent('张三&李四');
console.log(param); // %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B
// encodeURI: เข้ารหัส URL เต็ม (รักษาอักขระโครงสร้าง :/?#&=)
const url = encodeURI('https://example.com/search?q=สวัสดี ชาวโลก');
console.log(url);
// ถอดรหัส
const decoded = decodeURIComponent(param);
console.log(decoded); // 张三&李四
// เข้ากันได้กับ RFC 3986 (~ ไม่เข้ารหัส)
function rfc3986Encode(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase());
}
// API URLSearchParams (วิธีสมัยใหม่ เข้ารหัสอัตโนมัติ)
const params = new URLSearchParams({ name: '张三', city: '北京' });
console.log(params.toString());
// name=%E5%BC%A0%E4%B8%89&city=%E5%8C%97%E4%BA%ACการเข้ารหัส/ถอดรหัส URL ใน Python
from urllib.parse import quote, unquote, urlencode, quote_plus
# quote: คล้ายกับ encodeURIComponent
encoded = quote('张三&李四')
print(encoded) # %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B
# โหมด RFC 3986 (~ ค่าเริ่มต้นไม่เข้ารหัส)
print(quote('hello~world')) # hello~world
# quote_plus: ช่องว่างเข้ารหัสเป็น + (รูปแบบฟอร์ม)
print(quote_plus('hello world')) # hello+world
# ถอดรหัส
print(unquote(encoded)) # 张三&李四
# urlencode: สร้าง query string
params = urlencode({'name': '张三', 'city': '北京'})
print(params)
# name=%E5%BC%A0%E4%B8%89&city=%E5%8C%97%E4%BA%ACการเข้ารหัส/ถอดรหัส URL ใน Java
import java.net.URLEncoder;
import java.net.URLDecoder;
import java.net.URI;
import java.nio.charset.StandardCharsets;
public class URLEncodeExample {
public static void main(String[] args) throws Exception {
// เข้ารหัส URL (URLEncoder - รูปแบบฟอร์ม ช่องว่างเป็น +)
String encoded = URLEncoder.encode("张三&李四", "UTF-8");
System.out.println(encoded);
// %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B
// ถอดรหัส
String decoded = URLDecoder.decode(encoded, "UTF-8");
System.out.println(decoded); // 张三&李四
// สร้าง URL เต็ม (คลาส URI จัดการการเข้ารหัสอัตโนมัติ)
URI uri = new URI("https", "example.com", "/search", "q=สวัสดี", null);
System.out.println(uri.toASCIIString());
}
}คำถามที่พบบ่อย
ความแตกต่างระหว่าง encodeURIComponent และ encodeURI คืออะไร?
encodeURIComponent เข้ารหัสอักขระที่ไม่ปลอดภัยทั้งหมด รวมถึง &, =, ?, ฯลฯ ดังนั้นเหมาะสำหรับเข้ารหัสค่าพารามิเตอร์แต่ละค่า encodeURI รักษาอักขระโครงสร้าง URL (:, /, ?, #, ฯลฯ) ดังนั้นเหมาะสำหรับเข้ารหัส URL เต็ม กรณีการใช้งาน: Component สำหรับค่าพารามิเตอร์ URI สำหรับ URL เต็ม
ความแตกต่างระหว่าง RFC 3986 และการเข้ารหัสมาตรฐานคืออะไร?
RFC 3986 เป็นเวอร์ชันมาตรฐาน URL ที่อัปเดต ซึ่งถือว่าทิลดา ~ เป็นอักขระปลอดภัยที่ไม่จำเป็นต้องเข้ารหัส ในขณะที่มาตรฐานเก่าเข้ารหัสเป็น %7E การใช้ RFC 3986 สามารถหลีกเลี่ยงความแตกต่างในการแยกวิเคราะห์บนเซิร์ฟเวอร์บางแห่งและให้ความเข้ากันได้ดีขึ้น
โหมด Query Only ใช้ในสถานการณ์ใด?
ใช้เมื่อคุณมี query string URL รูปแบบ ?name=张三&city=北京 และต้องการเข้ารหัสเฉพาะค่าพารามิเตอร์โดยไม่เปลี่ยนชื่อคีย์และอักขระ ในกรณีนี้ name และ city ยังคงไม่เปลี่ยนแปลง และค่าถูกเข้ารหัสเป็น %E5%BC%A0%E4%B8%89 และ %E5%8C%97%E4%BA%AC
ช่องว่างควรถูกเข้ารหัสเป็น + หรือ %20?
ในรูปแบบ application/x-www-form-urlencoded (การส่งฟอร์ม HTML) ช่องว่างถูกเข้ารหัสเป็น + แต่ในเส้นทาง URL และใน encodeURIComponent ช่องว่างถูกเข้ารหัสเป็น %20 เสมอ เครื่องมือนี้ใช้รูปแบบ %20 เป็นค่าเริ่มต้น
เหตุใดเครื่องมือต่างๆ จึงให้ผลลัพธ์ที่แตกต่างกันสำหรับอักขระจีนตัวเดียวกัน?
ขึ้นอยู่กับวิธีการเข้ารหัสอักขระ เครื่องมือนี้ใช้การเข้ารหัส UTF-8 (มาตรฐานเว็บ) อักขระจีน '中' ถูกเข้ารหัสเป็น %E4%B8%AD หากเครื่องมืออื่นใช้การเข้ารหัส GBK ผลลัพธ์จะเป็น %D6%D0 แนะนำให้ใช้ UTF-8 สำหรับ URL เว็บเสมอ
การเน้นการเข้ารหัสมีไว้เพื่ออะไร?
เน้นอักขระที่เข้ารหัสในรูปแบบ %XX (เช่น ช่องว่าง→%20) แบบเรียลไทม์ ช่วยให้เข้าใจกฎการเข้ารหัสและแก้ไขปัญหา ตัวอักษรและตัวเลขเป็นอักขระปลอดภัยที่ไม่ถูกเข้ารหัส เฉพาะจีนและอักขระพิเศษเท่านั้นที่ถูกเข้ารหัส
อักขระ % เองจำเป็นต้องเข้ารหัสหรือไม่?
ใช่ % เป็นอักขระเริ่มต้นของการเอสเคปในการเข้ารหัส URL หาก % ที่เป็นตัวอักษรปรากฏในค่าพารามิเตอร์ จะต้องถูกเข้ารหัสเป็น %25 มิฉะนั้นจะถูกตีความผิดว่าเป็นคำนำหน้าการเข้ารหัส ทำให้เกิดข้อผิดพลาดในการแยกวิเคราะห์ ตัวอย่างเช่น 100% ต้องถูกเข้ารหัสเป็น 100%25
อภิธานศัพท์
- เปอร์เซ็นต์-เอ็นโค้ดดิ้ง (Percent-encoding)
- ชื่อทางการของการเข้ารหัส URL วิธีการเข้ารหัสที่แสดงอักขระด้วย % ตามด้วยตัวเลขฐานสิบหกสองหลัก ตัวอย่างเช่น ช่องว่างเป็น %20 อักขระจีน '中' เป็น %E4%B8%ADวิกิพีเดีย - Percent-encoding
- encodeURIComponent
- ฟังก์ชันในตัวของ JavaScript เข้ารหัสอักขระทั้งหมดยกเว้น A-Z a-z 0-9 - _ . ! ~ * ' ( ) ใช้บ่อยที่สุดสำหรับเข้ารหัสค่าพารามิเตอร์คิวรีแต่ละค่า
- encodeURI
- ฟังก์ชันในตัวของ JavaScript รักษาอักขระโครงสร้าง URL (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) และเข้ารหัสเฉพาะอักขระที่จำเป็นต้องเข้ารหัสจริงๆ ใช้สำหรับเข้ารหัส URL เต็ม
- RFC 3986
- มาตรฐาน IETF ล่าสุดสำหรับไวยากรณ์ทั่วไปของ URI (2005) กำหนดกฎการเข้ารหัส URL และจำแนกทิลดา ~ เป็นอักขระที่ไม่สงวน (ไม่จำเป็นต้องเข้ารหัส) แทนที่ RFC 2396 และ RFC 1738 เก่าRFC 3986
- อักขระสงวน (Reserved Characters)
- อักขระที่มีความหมายพิเศษใน URL เช่น : / ? # [ ] @ ! $ & ' ( ) * + , ; = อักขระเหล่านี้ต้องถูกเข้ารหัสเมื่อใช้เป็นข้อมูล แต่ไม่ใช่ในตำแหน่งโครงสร้าง
- อักขระที่ไม่สงวน (Unreserved Characters)
- อักขระปลอดภัยที่สามารถใช้ในตำแหน่งใดๆ ของ URL โดยไม่ต้องเข้ารหัส รวมถึง A-Z, a-z, 0-9, -, _, ., ~ (ตาม RFC 3986)
- Query String
- ส่วนของ URL หลังเครื่องหมาย ? ประกอบด้วยคู่ key=value ที่คั่นด้วย & ตัวอย่างเช่น ใน ?name=张三&age=20 name=张三 และ age=20 เป็นพารามิเตอร์สองตัว
- URLSearchParams
- API ที่ให้โดยเบราว์เซอร์สมัยใหม่สำหรับสร้างและแยกวิเคราะห์ query string URL ได้อย่างสะดวก พร้อมการจัดการเข้ารหัสและถอดรหัสอัตโนมัติ ปลอดภัยและเชื่อถือได้มากกว่าการเชื่อมต่อสตริงด้วยตนเอง
- application/x-www-form-urlencoded
- รูปแบบการส่งเริ่มต้นสำหรับฟอร์ม HTML ซึ่งช่องว่างถูกเข้ารหัสเป็น + แทน %20 ซึ่งแตกต่างจาก encodeURIComponent เล็กน้อย เฟรมเวิร์กเซิร์ฟเวอร์มักจะจัดการทั้งสองรูปแบบโดยอัตโนมัติ
- การเข้ารหัส UTF-8
- วิธีการเข้ารหัสอักขระมาตรฐานสำหรับเว็บ ในการเข้ารหัส URL อักขระที่ไม่ใช่ ASCII (เช่น จีน อีโมจิ) จะถูกแปลงเป็นลำดับไบต์ UTF-8 ก่อน จากนั้นแต่ละไบต์จะถูกเข้ารหัสในรูปแบบ %XX
เปรียบเทียบอักขระที่ถูกเอสเคปใน 4 โหมดการเข้ารหัส
| อักขระ | ความหมาย | encodeURIComponent | encodeURI | RFC 3986 |
|---|---|---|---|---|
ช่องว่าง | ช่องว่าง | %20 | %20 | %20 |
! | อัศเจริญ | %21 | ! | %21 |
# | ตัวระบุชิ้นส่วน | %23 | # | %23 |
$ | เครื่องหมายดอลลาร์ | %24 | $ | %24 |
& | ตัวคั่นพารามิเตอร์ | %26 | & | %26 |
' | อัญประกาศเดี่ยว | %27 | ' | %27 |
( | วงเล็บเปิด | %28 | ( | %28 |
) | วงเล็บปิด | %29 | ) | %29 |
* | ดอกจัน | %2A | * | %2A |
+ | เครื่องหมายบวก | %2B | + | %2B |
, | จุลภาค | %2C | , | %2C |
/ | ตัวคั่นเส้นทาง | %2F | / | %2F |
: | ทวิภาค | %3A | : | %3A |
; | อัฒภาค | %3B | ; | %3B |
= | เครื่องหมายเท่ากับ | %3D | = | %3D |
? | ปรัศนี | %3F | ? | %3F |
@ | แอต | %40 | @ | %40 |
~ | ทิลดา | %7E | %7E | ~ |
อ้างอิงด่วนอักขระสงวน URL ที่พบบ่อย
| เข้ารหัสแล้ว | อักขระเดิม | การใช้งานใน URL |
|---|---|---|
%20 | (ช่องว่าง) | ช่องว่าง |
%21 | ! | ตัวคั่นรอง |
%23 | # | ตัวระบุชิ้นส่วน (แฮช) |
%25 | % | อักขระเอสเคปเอง |
%26 | & | ตัวคั่นพารามิเตอร์คิวรี |
%2B | + | เครื่องหมายบวก / ช่องว่างในฟอร์ม |
%2F | / | ตัวคั่นเส้นทาง |
%3A | : | ตัวคั่นสคีมา |
%3D | = | ตัวคั่นคีย์-ค่า |
%3F | ? | จุดเริ่มต้น query string |
%40 | @ | ตัวคั่น auth/อีเมล |
%5B | [ | พารามิเตอร์อาร์เรย์ (RFC 3986) |
Authoritative References
- เปรียบเทียบข้อความอย่างปลอดภัย
- การแปลงเลขฐานสอง
- รหัสซีซาร์ (Caesar Cipher)
- ตัวแปลงรหัสมอร์ส
- เลขฐานสิบหก (Hex)
- วิดีโอเป็น Base64
- Base64 เป็นวิดีโอ
- แปลงรูปภาพเป็น Base64
- Base64 เป็นรูปภาพ
- แปลงข้อความเป็น Base64
- Base64 เป็นข้อความ
- ตัวตรวจสอบแฮชไฟล์
- แปลงไฟล์เป็น Base64
- Base64 เป็นไฟล์
- แปลงเสียงเป็น Base64
- Base64 เป็นเสียง
- เข้ารหัสและถอดรหัส AES
- เข้ารหัสและถอดรหัส DES
- ตัวเข้ารหัสและถอดรหัส Base32
- Base58 การเข้ารหัสและถอดรหัส
- การเข้ารหัส Base64
- ถอดรหัส Base64
- เปรียบเทียบ Base64
- แยก Base64
- รวม Base64 หลายบรรทัด
- การจัดรูปแบบ Base64
- ตรวจสอบรูปแบบ Base64
- เข้ารหัส Base64 แบบกลุ่ม
- ถอดรหัส Base64 หลายรายการ
- เครื่องมือล้าง Base64
- เครื่องมือจัดการ padding Base64
- สถิติความยาว Base64
- Base64 เป็น Hex
- ตัวแปลง Base64 DataURL
- ตัวแปลง Base64-Hex
- ตัวแปลงรหัส Base85
- สร้างและตรวจสอบ HMAC
- เครื่องมือสร้างคีย์ PBKDF2
- แฮช MD5
- แฮช SHA-256
- แฮช SHA-1
- แฮช SHA512
- ถอดรหัส ตรวจสอบ และสร้าง JWT
- เข้ารหัสและถอดรหัส HTML
- ตัวแปลงรหัส Unicode
- การเข้ารหัส URL
- URL Safe Base64
- MIME Base64
- ทำให้โค้ด Java อ่านยาก (Obfuscate)
- ทำให้โค้ด JS อ่านยาก (Obfuscate)
- ทำให้โค้ด PHP อ่านยาก (Obfuscate)
- ทำให้โค้ด Python อ่านยาก (Obfuscate)