logo
GeekFormat
Mã khớp
Nhập URL
0 chars

Công cụ mã hóa/giải mã URL trực tuyến miễn phí. Hỗ trợ 4 chế độ encodeURIComponent/encodeURI/RFC 3986, đánh dấu ký tự mã hóa theo thời gian thực, chế độ hàng loạt nhiều dòng, Query Only để chỉ mã hóa giá trị tham số. Xử lý cục bộ trên trình duyệt, không tải dữ liệu lên.

Đề xuất Liên quan

Trường hợp sử dụng

  • Gỡ lỗi tham số API: so sánh đầu ra của encodeURIComponent và encodeURI để giải quyết vấn đề không khớp chữ ký giao diện
  • Giải mã log: giải mã hàng loạt nội dung được mã hóa URL trong log để khôi phục văn bản có thể đọc được
  • Tạo URL: chế độ Query Only giữ nguyên tên khóa và chỉ mã hóa giá trị, tránh lỗi định dạng khi nối chuỗi thủ công
  • Phát triển frontend: đánh dấu giúp hiểu những ký tự nào được thoát, hữu ích để gỡ lỗi chuyển hướng trang
  • Di chuyển dữ liệu: xử lý hàng loạt dữ liệu được mã hóa URL xuất từ hệ thống cũ để chuyển đổi sang định dạng mới

Tính năng

  • Bốn chế độ mã hóa: chuyển đổi giữa encodeURIComponent / encodeURI / full / RFC 3986 bằng một cú nhấp, so sánh sự khác biệt đầu ra theo thời gian thực
  • Đánh dấu mã hóa: làm nổi bật các ký tự %XX đã thoát theo thời gian thực, đánh dấu màu hổ phách giúp kết quả mã hóa hiển thị ngay lập tức
  • Chế độ hàng loạt: hỗ trợ mã hóa/giải mã hàng loạt nhiều dòng, mỗi dòng được xử lý độc lập, lý tưởng cho log hoặc dữ liệu lớn
  • Chế độ Query Only: chỉ mã hóa phần giá trị tham số của URL (sau dấu bằng), giữ nguyên tên khóa, ký tự và cấu trúc đường dẫn
  • Debounce thời gian thực: tự động mã hóa/giải mã trong 300ms, không cần nhấp nút, kết quả hiển thị khi đang gõ
  • Đếm ký tự: hiển thị số lượng ký tự đã nhập theo thời gian thực, hữu ích để kiểm tra giới hạn độ dài tham số API

Cách Sử dụng

  1. Nhập hoặc dán URL hoặc văn bản cần mã hóa/giải mã
  2. Chọn hướng mã hóa (Mã hóa/Giải mã) và chế độ (Component / URI / full / RFC 3986)
  3. Bật chế độ hàng loạt cho dữ liệu nhiều dòng hoặc Query Only để chỉ mã hóa giá trị tham số
  4. Kiểm tra kết quả được đánh dấu và sao chép chuỗi đã mã hóa để sử dụng trong lệnh gọi API hoặc tạo URL

Câu hỏi Thường gặp

Sự khác biệt giữa encodeURIComponent và encodeURI là gì?

encodeURIComponent mã hóa tất cả các ký tự không an toàn, bao gồm &, =, ?, v.v., nên phù hợp để mã hóa từng giá trị tham số. encodeURI giữ nguyên các ký tự cấu trúc URL (:, /, ?, #, v.v.), nên phù hợp để mã hóa URL đầy đủ. Trường hợp sử dụng: Component cho giá trị tham số, URI cho URL đầy đủ.

Sự khác biệt giữa RFC 3986 và mã hóa tiêu chuẩn là gì?

RFC 3986 là phiên bản tiêu chuẩn URL được cập nhật, coi dấu ngã ~ là ký tự an toàn không cần mã hóa, trong khi các tiêu chuẩn cũ mã hóa nó thành %7E. Sử dụng RFC 3986 có thể tránh sự khác biệt phân tích cú pháp trên một số máy chủ và cung cấp khả năng tương thích tốt hơn.

Chế độ Query Only được sử dụng trong những tình huống nào?

Được sử dụng khi bạn có query string URL dạng ?name=张三&city=北京 và chỉ muốn mã hóa giá trị tham số mà không thay đổi tên khóa và ký tự. Trong trường hợp này, name và city không thay đổi, và các giá trị được mã hóa thành %E5%BC%A0%E4%B8%89 và %E5%8C%97%E4%BA%AC.

Khoảng trắng nên được mã hóa thành + hay %20?

Trong định dạng application/x-www-form-urlencoded (gửi form HTML), khoảng trắng được mã hóa thành +. Nhưng trong đường dẫn URL và trong encodeURIComponent, khoảng trắng luôn được mã hóa thành %20. Công cụ này mặc định sử dụng định dạng %20.

Tại sao các công cụ khác nhau cho kết quả khác nhau cho cùng một ký tự Trung Quốc?

Điều này phụ thuộc vào phương pháp mã hóa ký tự. Công cụ này sử dụng mã hóa UTF-8 (tiêu chuẩn web), ký tự Trung Quốc '中' được mã hóa thành %E4%B8%AD. Nếu các công cụ khác sử dụng mã hóa GBK, kết quả sẽ là %D6%D0. Đề xuất luôn sử dụng UTF-8 cho URL web.

Đánh dấu mã hóa để làm gì?

Làm nổi bật các ký tự được mã hóa ở định dạng %XX (ví dụ khoảng trắng→%20) theo thời gian thực, giúp hiểu quy tắc mã hóa và giải quyết vấn đề. Chữ cái và số là ký tự an toàn không được mã hóa, chỉ tiếng Trung và ký tự đặc biệt mới được mã hóa.

Bản thân ký tự % có cần mã hóa không?

Có. % là ký tự bắt đầu của việc thoát trong mã hóa URL. Nếu một % chữ xuất hiện trong giá trị tham số, nó phải được mã hóa thành %25; nếu không, nó sẽ bị diễn giải sai là tiền tố mã hóa, gây ra lỗi phân tích cú pháp. Ví dụ: 100% phải được mã hóa thành 100%25.

Mã hóa URL là gì?

Mã hóa URL (mã hóa phần trăm) là quá trình chuyển đổi các ký tự không an toàn trong URL thành định dạng %XX. URL chỉ có thể chứa một tập con nhỏ của ký tự ASCII (chữ cái, chữ số, -_.~), tất cả các ký tự khác (bao gồm tiếng Trung, khoảng trắng, ký tự đặc biệt) phải được mã hóa trước khi truyền trong URL. Ví dụ: khoảng trắng thành %20, ký tự Trung Quốc '中' thành %E4%B8%AD.

**encodeURIComponent vs encodeURI**: Đây là hai hàm mã hóa được sử dụng phổ biến nhất. encodeURIComponent mã hóa kỹ lưỡng hơn, bao gồm các dấu phân cách tham số như &, =, ?, nên phù hợp để mã hóa từng giá trị tham số. encodeURI giữ nguyên cấu trúc URL (scheme://, đường dẫn, /, ?, #), nên phù hợp để mã hóa URL đầy đủ. Sử dụng sai dẫn đến lỗi phân tích tham số.

**RFC 3986 vs các tiêu chuẩn cũ**: RFC 3986 coi dấu ngã ~ là ký tự an toàn không cần mã hóa, trong khi các tiêu chuẩn đầu tiên mã hóa nó thành %7E. Sử dụng RFC 3986 giảm thoát không cần thiết, cải thiện khả năng đọc URL và tránh các vấn đề phân tích %7E trên một số máy chủ.

**Chế độ Query Only**: Được sử dụng khi bạn chỉ muốn mã hóa giá trị tham số trong query string URL, mà không thay đổi tên khóa, dấu bằng và ký tự &. Ví dụ: ?name=张三 được mã hóa thành ?name=%E5%BC%A0%E4%B8%89, giữ nguyên tên khóa có thể đọc được và chỉ mã hóa giá trị.

**Đánh dấu mã hóa**: Làm nổi bật các ký tự ở định dạng %XX bằng màu hổ phách theo thời gian thực, để người dùng có thể thấy ngay những ký tự nào đã được mã hóa. Điều này giúp hiểu quy tắc mã hóa: chữ cái và số thường là ký tự an toàn không được mã hóa, chỉ tiếng Trung và ký tự đặc biệt mới được mã hóa. Tất cả các phép tính được thực hiện cục bộ trên trình duyệt, không có dữ liệu nào được tải lên.

术语表

Mã hóa phần trăm (Percent-encoding)
Tên chính thức của mã hóa URL, một phương pháp mã hóa biểu diễn ký tự bằng % theo sau là hai chữ số thập lục phân. Ví dụ: khoảng trắng thành %20, ký tự Trung Quốc '中' thành %E4%B8%AD.Wikipedia - Percent-encoding
encodeURIComponent
Hàm tích hợp sẵn trong JavaScript, mã hóa tất cả các ký tự ngoại trừ A-Z a-z 0-9 - _ . ! ~ * ' ( ). Thường được sử dụng nhất để mã hóa từng giá trị tham số truy vấn.
encodeURI
Hàm tích hợp sẵn trong JavaScript, giữ nguyên các ký tự cấu trúc URL (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) và chỉ mã hóa các ký tự thực sự cần mã hóa. Được sử dụng để mã hóa URL đầy đủ.
RFC 3986
Tiêu chuẩn IETF mới nhất cho cú pháp chung URI (2005), định nghĩa các quy tắc mã hóa URL và phân loại dấu ngã ~ là ký tự không dành riêng (không cần mã hóa). Thay thế RFC 2396 và RFC 1738 cũ.RFC 3986
Ký tự dành riêng (Reserved Characters)
Các ký tự có ý nghĩa đặc biệt trong URL, như : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Các ký tự này phải được mã hóa khi được sử dụng làm dữ liệu, nhưng không ở vị trí cấu trúc của chúng.
Ký tự không dành riêng (Unreserved Characters)
Ký tự an toàn có thể được sử dụng ở bất kỳ vị trí nào trong URL mà không cần mã hóa, bao gồm A-Z, a-z, 0-9, -, _, ., ~ (theo RFC 3986).
Query String
Phần của URL sau dấu ?, bao gồm các cặp key=value được phân tách bằng &. Ví dụ: trong ?name=张三&age=20, name=张三 và age=20 là hai tham số.
URLSearchParams
API được cung cấp bởi các trình duyệt hiện đại để tạo và phân tích cú pháp query string URL một cách thuận tiện, với xử lý mã hóa và giải mã tự động. An toàn và đáng tin cậy hơn so với nối chuỗi thủ công.
application/x-www-form-urlencoded
Định dạng gửi mặc định cho form HTML, trong đó khoảng trắng được mã hóa thành + thay vì %20, hơi khác so với encodeURIComponent. Các framework máy chủ thường tự động xử lý cả hai định dạng.
Mã hóa UTF-8
Phương pháp mã hóa ký tự tiêu chuẩn cho web. Khi mã hóa URL, các ký tự không phải ASCII (như tiếng Trung, emoji) trước tiên được chuyển đổi thành chuỗi byte UTF-8, sau đó mỗi byte được mã hóa ở định dạng %XX.

So sánh các ký tự được thoát ở 4 chế độ mã hóa

Ký tựÝ nghĩaencodeURIComponentencodeURIRFC 3986
Khoảng trắngKhoảng trắng%20%20%20
!Dấu chấm than%21!%21
#Định danh phân mảnh%23#%23
$Dấu đô la%24$%24
&Dấu phân cách tham số%26&%26
'Dấu nháy đơn%27'%27
(Dấu ngoặc trái%28(%28
)Dấu ngoặc phải%29)%29
*Dấu sao%2A*%2A
+Dấu cộng%2B+%2B
,Dấu phẩy%2C,%2C
/Dấu phân cách đường dẫn%2F/%2F
:Dấu hai chấm%3A:%3A
;Dấu chấm phẩy%3B;%3B
=Dấu bằng%3D=%3D
?Dấu chấm hỏi%3F?%3F
@Dấu at%40@%40
~Dấu ngã%7E%7E~

Tra cứu nhanh các ký tự dành riêng phổ biến trong URL

Đã mã hóaKý tự gốcSử dụng trong URL
%20(khoảng trắng)Khoảng trắng
%21!Dấu phân cách phụ
%23#Định danh phân mảnh (hash)
%25%Chính ký tự thoát
%26&Dấu phân cách tham số truy vấn
%2B+Dấu cộng / khoảng trắng trong form
%2F/Dấu phân cách đường dẫn
%3A:Dấu phân cách scheme
%3D=Dấu phân cách khóa-giá trị
%3F?Bắt đầu query string
%40@Dấu phân cách auth/email
%5B[Tham số mảng (RFC 3986)

Code Examples

Mã hóa/Giải mã URL trong JavaScript

// encodeURIComponent: mã hóa từng giá trị tham số (thường dùng nhất)
const param = encodeURIComponent('张三&李四');
console.log(param); // %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B

// encodeURI: mã hóa URL đầy đủ (giữ nguyên ký tự cấu trúc :/?#&=)
const url = encodeURI('https://example.com/search?q=xin chào thế giới');
console.log(url);

// Giải mã
const decoded = decodeURIComponent(param);
console.log(decoded); // 张三&李四

// Tương thích RFC 3986 (~ không mã hóa)
function rfc3986Encode(str) {
  return encodeURIComponent(str).replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase());
}

// API URLSearchParams (cách hiện đại, mã hóa tự động)
const params = new URLSearchParams({ name: '张三', city: '北京' });
console.log(params.toString());
// name=%E5%BC%A0%E4%B8%89&city=%E5%8C%97%E4%BA%AC

Mã hóa/Giải mã URL trong Python

from urllib.parse import quote, unquote, urlencode, quote_plus

# quote: tương tự encodeURIComponent
encoded = quote('张三&李四')
print(encoded)  # %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B

# Chế độ RFC 3986 (~ mặc định không mã hóa)
print(quote('hello~world'))  # hello~world

# quote_plus: khoảng trắng được mã hóa thành + (định dạng form)
print(quote_plus('hello world'))  # hello+world

# Giải mã
print(unquote(encoded))  # 张三&李四

# urlencode: tạo query string
params = urlencode({'name': '张三', 'city': '北京'})
print(params)
# name=%E5%BC%A0%E4%B8%89&city=%E5%8C%97%E4%BA%AC

Mã hóa/Giải mã URL trong 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 {
        // Mã hóa URL (URLEncoder - định dạng form, khoảng trắng thành +)
        String encoded = URLEncoder.encode("张三&李四", "UTF-8");
        System.out.println(encoded);
        // %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B

        // Giải mã
        String decoded = URLDecoder.decode(encoded, "UTF-8");
        System.out.println(decoded); // 张三&李四

        // Tạo URL đầy đủ (lớp URI xử lý mã hóa tự động)
        URI uri = new URI("https", "example.com", "/search", "q=xin chào", null);
        System.out.println(uri.toASCIIString());
    }
}

Authoritative References