การเข้ารหัส URL

รหัสการจับ
นําเข้าที่อยู่ URL
0 chars

เครื่องมือเข้ารหัส/ถอดรหัส 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 ที่ส่งออกจากระบบเก่าแบบแบตช์เพื่อแปลงเป็นรูปแบบใหม่

วิธีการใช้งาน

  1. ป้อนหรือวาง URL หรือข้อความที่ต้องการเข้ารหัส/ถอดรหัส
  2. เลือกทิศทางการเข้ารหัส (เข้ารหัส/ถอดรหัส) และโหมด (Component / URI / full / RFC 3986)
  3. เปิดโหมดแบตช์สำหรับข้อมูลหลายบรรทัดหรือ Query Only สำหรับเข้ารหัสเฉพาะค่าพารามิเตอร์
  4. ตรวจสอบผลลัพธ์ที่เน้นและคัดลอกสตริงที่เข้ารหัสเพื่อใช้ในการเรียก 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 โหมดการเข้ารหัส

อักขระความหมายencodeURIComponentencodeURIRFC 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