logo
GeekFormat

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

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

เครื่องมือเข้ารหัส/ถอดรหัส URL ออนไลน์ฟรี รองรับ 4 โหมด encodeURIComponent/encodeURI/RFC 3986 เน้นอักขระที่เข้ารหัสแบบเรียลไทม์ โหมดแบตช์หลายบรรทัด Query Only สำหรับเข้ารหัสเฉพาะค่าพารามิเตอร์ ประมวลผลในเบราว์เซอร์ ไม่อัปโหลดข้อมูล

คำแนะนำที่เกี่ยวข้อง

กรณีการใช้งาน

  • ดีบักพารามิเตอร์ API: เปรียบเทียบผลลัพธ์ของ encodeURIComponent และ encodeURI เพื่อแก้ไขปัญหาลายเซ็นอินเทอร์เฟซไม่ตรงกัน
  • ถอดรหัสล็อก: ถอดรหัสเนื้อหาที่เข้ารหัส URL ในล็อกแบบแบตช์เพื่อกู้คืนข้อความที่อ่านได้
  • สร้าง URL: โหมด Query Only รักษาชื่อคีย์และเข้ารหัสเฉพาะค่า หลีกเลี่ยงข้อผิดพลาดรูปแบบเมื่อเชื่อมต่อสตริงด้วยตนเอง
  • พัฒนาฟรอนต์เอนด์: การเน้นช่วยให้เข้าใจว่าอักขระใดถูกเอสเคป มีประโยชน์สำหรับดีบักการเปลี่ยนเส้นทางหน้า
  • ย้ายข้อมูล: ประมวลผลข้อมูลที่เข้ารหัส URL ที่ส่งออกจากระบบเก่าแบบแบตช์เพื่อแปลงเป็นรูปแบบใหม่

คุณสมบัติ

  • 4 โหมดการเข้ารหัส: สลับระหว่าง encodeURIComponent / encodeURI / full / RFC 3986 ด้วยคลิกเดียว เปรียบเทียบความแตกต่างของผลลัพธ์แบบเรียลไทม์
  • การเน้นการเข้ารหัส: เน้นอักขระ %XX ที่ถูกเอสเคปแบบเรียลไทม์ การทำเครื่องหมายสีอำพันทำให้ผลลัพธ์การเข้ารหัสเห็นได้ทันที
  • โหมดแบตช์: รองรับการเข้ารหัส/ถอดรหัสแบตช์หลายบรรทัด แต่ละบรรทัดถูกประมวลผลอย่างอิสระ เหมาะสำหรับล็อกหรือข้อมูลจำนวนมาก
  • โหมด Query Only: เข้ารหัสเฉพาะส่วนค่าพารามิเตอร์ของ URL (หลังเครื่องหมายเท่ากับ) ทำให้ชื่อคีย์ อักขระ และโครงสร้างเส้นทางไม่เปลี่ยนแปลง
  • ดีบาวน์แบบเรียลไทม์: เข้ารหัส/ถอดรหัสอัตโนมัติภายใน 300 มิลลิวินาที ไม่ต้องคลิกปุ่ม ผลลัพธ์ปรากฏขณะพิมพ์
  • นับอักขระ: แสดงจำนวนอักขระที่ป้อนแบบเรียลไทม์ มีประโยชน์สำหรับตรวจสอบขีดจำกัดความยาวพารามิเตอร์ API

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

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

คำถามที่พบบ่อย

ความแตกต่างระหว่าง 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

การเข้ารหัส 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 ด้วยสีอำพันแบบเรียลไทม์ เพื่อให้ผู้ใช้สามารถเห็นทันทีว่าอักขระใดถูกเข้ารหัส สิ่งนี้ช่วยให้เข้าใจกฎการเข้ารหัส: ตัวอักษรและตัวเลขมักเป็นอักขระปลอดภัยที่ไม่ถูกเข้ารหัส เฉพาะจีนและอักขระพิเศษเท่านั้นที่ถูกเข้ารหัส การคำนวณทั้งหมดทำในเบราว์เซอร์แบบโลคัล ไม่มีข้อมูลถูกอัปโหลด

术语表

เปอร์เซ็นต์-เอ็นโค้ดดิ้ง (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)

Code Examples

การเข้ารหัส/ถอดรหัส 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());
    }
}

Authoritative References

เข้ารหัสและถอดรหัส AESแปลงเสียงเป็น Base64การเข้ารหัส Base32การเข้ารหัส Base58ถอดรหัส Base64 หลายรายการเข้ารหัส Base64 หลายรายการล้างอักขระ Base64แปลง Data URLถอดรหัส Base64เปรียบเทียบ Base64การเข้ารหัส Base64จัดรูปแบบ Base64ตัวแปลง Base64-Hexรวม Base64 หลายบรรทัดMIME Base64จัดการ Padding Base64แยก Base64 หลายบรรทัดสถิติความยาว Base64Base64 เป็นเสียงBase64 เป็นไฟล์Base64 เป็น HexBase64 เป็นรูปภาพBase64 เป็นข้อความBase64 เป็นวิดีโอURL Safe Base64ตรวจสอบรูปแบบ Base64ตัวแปลงรหัส Base85การแปลงเลขฐานสองรหัสซีซาร์ (Caesar Cipher)เข้ารหัสและถอดรหัส DESเครื่องมือคำนวณแฮชไฟล์แปลงไฟล์เป็น Base64เลขฐานสิบหก (Hex)สร้างและตรวจสอบ HMACเข้ารหัสและถอดรหัส HTMLแปลงรูปภาพเป็น Base64ทำให้โค้ด Java อ่านยาก (Obfuscate)ทำให้โค้ด JS อ่านยาก (Obfuscate)ถอดรหัส ตรวจสอบ และสร้าง JWTแฮช MD5ตัวแปลงรหัสมอร์สเครื่องมือสร้างคีย์ PBKDF2ทำให้โค้ด PHP อ่านยาก (Obfuscate)ทำให้โค้ด Python อ่านยาก (Obfuscate)เครื่องมือสร้าง SHA-1 แฮชแฮช SHA-256เครื่องมือสร้าง SHA-512 แฮชเปรียบเทียบข้อความอย่างปลอดภัยแปลงข้อความเป็น Base64ตัวแปลงรหัส Unicodeการเข้ารหัส URLวิดีโอเป็น Base64