การเข้ารหัสและถอดรหัส URL

เข้ารหัสและถอดรหัสสตริง URL เพื่อจัดการอักขระพิเศษและข้อความที่ไม่ใช่ ASCII อย่างปลอดภัย เหมาะสำหรับพารามิเตอร์การค้นหาและการส่งผ่านเส้นทาง

เข้ารหัส

โหมดการเข้ารหัส

ถอดรหัส

คำแนะนำการใช้งาน

การเข้ารหัส URL จะแปลงอักขระพิเศษหรืออักขระที่ไม่ใช่ ASCII เป็นรูปแบบ %XX เพื่อให้สามารถส่งผ่านใน URL ได้อย่างปลอดภัย
ใช้ "เข้ารหัส" เพื่อแปลงข้อความให้อยู่ในรูปแบบที่ปลอดภัยสำหรับ URL (เช่น พารามิเตอร์การค้นหา)
ใช้ "ถอดรหัส" เพื่อแปลงลำดับ %XX กลับเป็นอักขระเดิม
สถานการณ์ทั่วไป: การจัดการพารามิเตอร์การค้นหา การส่งข้อมูลแบบฟอร์ม การเรียก API ฯลฯ

ตัวอย่างด่วน

ข้อความต้นฉบับ
https://example.com/search?q=你好世界&type=text
การเข้ารหัส URL
https://example.com/search?q=%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C&type=text

คุณสมบัติ

  • สองโหมดการเข้ารหัส: encodeURIComponent และ encodeURI
  • การจัดการช่องว่างอย่างยืดหยุ่น: เข้ารหัสเป็น + หรือ %20
  • แปลงแบบเรียลไทม์พร้อมแสดงสถิติความยาวข้อมูลนำเข้า/ส่งออก
  • ปุ่มคัดลอก/ล้าง และส่งไปยังแผงอีกด้านได้แบบสองทาง
  • รองรับการแปลหลายภาษาครบถ้วนและธีมหลากหลายของ DaisyUI

URL Encoding คืออะไร

การเข้ารหัส URL จะแปลงตัวอักษรเป็นลำดับการเข้ารหัสเปอร์เซ็นต์ %XX เพื่อให้สามารถส่งผ่าน URL ได้อย่างปลอดภัย

encodeURIComponent เหมาะสำหรับส่วนประกอบเดียว (เช่น ค่าพารามิเตอร์การค้นหา) และจะเข้ารหัสตัวอักษรที่ไม่ใช่ตัวอักษรและตัวเลขเกือบทั้งหมด

encodeURI เหมาะสำหรับสตริง URI แบบสมบูรณ์ และจะไม่เข้ารหัสตัวอักษรที่มีความหมายทางโครงสร้าง เช่น ?, &, =, /

การใช้งานทั่วไป

  • สร้างพารามิเตอร์การค้นหา (คำค้นหา, เงื่อนไขการกรอง ฯลฯ)
  • การเข้ารหัสและการส่งข้อมูลแบบฟอร์ม GET/POST
  • การเข้ารหัสพารามิเตอร์คำขอ API
  • ใส่ข้อมูลที่ผู้ใช้ป้อนลงในส่วนของเส้นทาง URL อย่างปลอดภัย

คำถามที่พบบ่อยและข้อควรระวัง

  • encodeURI vs encodeURIComponent: ใช้ component สำหรับพารามิเตอร์เดียว และใช้ URI สำหรับลิงก์ทั้งหมด
  • ช่องว่างกับ +: application/x-www-form-urlencoded มักใช้ + แทนช่องว่างในสตริงการค้นหา
  • หลีกเลี่ยงการถอดรหัสซ้ำ: การถอดรหัสหลายครั้งจะทำลายข้อมูล
  • ลำดับเปอร์เซ็นต์ที่ไม่ถูกต้องจะขึ้นข้อผิดพลาด; ควรจัดการข้อผิดพลาดอย่างเหมาะสม

วิธีการเข้ารหัสและถอดรหัส URL ในภาษาโปรแกรม

JavaScript
เข้ารหัส
// Component (recommended for query values)
const encoded = encodeURIComponent(text);
// If you need '+' for spaces in query strings
const encodedPlus = encoded.replace(/%20/g, '+');
// Full URI
const encodedUri = encodeURI(url);
ถอดรหัส
// Treat '+' as space if needed
const input = plusAsSpace ? s.replace(/\+/g, ' ') : s;
// Component
const dec1 = decodeURIComponent(input);
// Fallback to decodeURI when input is a full URL
const dec2 = decodeURI(input);
PHP
เข้ารหัส
// Component (RFC 3986)
$encoded = rawurlencode($text);
// '+' for spaces (application/x-www-form-urlencoded)
$encodedPlus = str_replace('%20', '+', $encoded);
// Full query usage
$query = http_build_query(['q' => '你好 世界', 'type' => 'text']);
ถอดรหัส
// Component
$decoded = rawurldecode($s);
// If input uses '+' for spaces
$decodedPlus = urldecode($s);
Python
เข้ารหัส
from urllib.parse import quote, quote_plus

# Component (RFC 3986)
enc = quote(text, safe='')
# '+' for spaces (application/x-www-form-urlencoded)
enc_plus = quote_plus(text)
ถอดรหัส
from urllib.parse import unquote, unquote_plus

# Component
dec = unquote(s)
# Input with '+' for spaces
dec_plus = unquote_plus(s)
Go
เข้ารหัส
import (
    "net/url"
)

// Query component
enc := url.QueryEscape(text) // spaces => +
// Path segment
// go1.8+
// url.PathEscape(text)
ถอดรหัส
import (
    "net/url"
)

// Query component
dec, _ := url.QueryUnescape(s)
// Path segment
// url.PathUnescape(s)
Rust
เข้ารหัส
// Cargo.toml: urlencoding = "^2"
use urlencoding::{encode, encode_binary};

let enc = encode(text);              // component; spaces => %20
let enc_plus = enc.replace("%20", "+"); // if you need '+' for spaces
ถอดรหัส
use urlencoding::decode;

// decode treats '+' as space
let dec = decode(s)?; // Result, _>
Java
เข้ารหัส
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

// Query param / form style (spaces => '+')
String enc = URLEncoder.encode(text, StandardCharsets.UTF_8);
// For RFC3986-like component encoding, replace '+' with %20 if needed
String encSpace = enc.replace("+", "%20");
ถอดรหัส
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;

// URLDecoder treats '+' as space
String dec = URLDecoder.decode(s, StandardCharsets.UTF_8);