Mã hóa URL Trực tuyến

Mã hóa các ký tự đặc biệt trong URL

Thử ví dụ

Văn bản thuần / URL

Đã mã hóa

Chạy cục bộ · An toàn để dán thông tin bí mật
Đầu ra đã mã hóa...
Chế độ:

Mã hóa URL là gì?

Mã hóa URL (còn gọi là mã hóa phần trăm) là cơ chế mã hóa thông tin trong Định danh Tài nguyên Thống nhất (URI) để chỉ các ký tự được phép bởi RFC 3986 xuất hiện trong chuỗi cuối. Bất kỳ ký tự nào không phải ký tự không dành riêng (A–Z, a–z, 0–9, -, _, ., ~) đều được thay thế bằng dấu phần trăm theo sau là hai chữ số thập lục phân biểu thị giá trị byte UTF-8 của ký tự — ví dụ, dấu cách trở thành %20 và & trở thành %26.

Mã hóa phần trăm là cần thiết vì URL chỉ có thể chứa một bộ ký tự ASCII giới hạn. Khi URL bao gồm các ký tự ngoài bộ này — dấu cách, chữ Unicode, ký hiệu như &, = hoặc / dùng làm giá trị thực thay vì dấu phân cách cấu trúc — những ký tự đó phải được mã hóa để ngăn bộ phân tích cú pháp URL hiểu sai. Điều này đặc biệt quan trọng với các giá trị chuỗi truy vấn, nơi & hoặc = không được mã hóa sẽ phá vỡ cấu trúc tham số.

Tại sao sử dụng công cụ này?

Xem ngay cách văn bản của bạn được mã hóa trong cả hai chế độ với so sánh trực tiếp cạnh nhau — không cần viết code để kiểm tra các trường hợp biên.

Xem trước trực tiếp
Đầu ra cập nhật khi bạn gõ. Thử các đầu vào khác nhau và xem ngay ký tự nào được mã hóa và ký tự nào được giữ nguyên.
🔀
Hai chế độ
Chuyển đổi giữa encodeURIComponent (cho giá trị) và encodeURI (cho URL đầy đủ) mà không rời khỏi trang.
🔒
Chỉ phía máy khách
Tất cả mã hóa chạy cục bộ trong trình duyệt của bạn. Các tham số truy vấn nhạy cảm và token không bao giờ chạm tới máy chủ.
📋
Sao chép một nhấp
Sao chép đầu ra đã mã hóa vào clipboard bằng một nút. Sẵn sàng dán trực tiếp vào code, terminal hoặc thanh địa chỉ trình duyệt.

Cách sử dụng công cụ mã hóa URL trực tuyến này

Không cần tài khoản, không cần cài đặt. Dán hoặc nhập văn bản vào trường nhập liệu và kết quả mã hóa phần trăm xuất hiện ngay lập tức. Mọi thứ chạy trong trình duyệt của bạn — dữ liệu của bạn không bao giờ rời khỏi thiết bị.

  1. 1
    Dán văn bản hoặc URL của bạn
    Nhập bất kỳ chuỗi nào — giá trị tham số truy vấn, URL đầy đủ, phân đoạn đường dẫn hoặc dữ liệu JSON. Bộ mã hóa xử lý từng ký tự theo RFC 3986.
  2. 2
    Chọn chế độ mã hóa
    Chọn encodeURIComponent để mã hóa các giá trị tham số riêng lẻ (mã hóa tất cả trừ ký tự không được đặt trước). Chọn encodeURI để mã hóa URL đầy đủ trong khi giữ nguyên các ký tự cấu trúc như ://?#&=.
  3. 3
    Sao chép kết quả đã mã hóa
    Chuỗi mã hóa phần trăm xuất hiện ngay lập tức. Nhấp Sao chép để lấy kết quả và dán trực tiếp vào lời gọi API, hành động form hoặc file cấu hình.
  4. 4
    Giải mã lại nếu cần
    Mắc lỗi hoặc muốn xác minh kết quả? Chuyển sang công cụ Giải mã URL bằng một cú nhấp để đảo ngược quá trình mã hóa.

Những ký tự nào được mã hóa?

RFC 3986 chia ký tự URL thành hai loại: ký tự không dành riêng (không bao giờ mã hóa) và ký tự dành riêng (có ý nghĩa đặc biệt — được mã hóa hoặc giữ nguyên tùy ngữ cảnh). Bảng dưới đây cho thấy hai hàm JavaScript xử lý các ký tự chính như thế nào:

Ký tựÝ nghĩa trong URLencodeURIComponentencodeURI
Spaceword separator%20%20
+plus sign%2B%2B
/path separator%2F/ (kept)
?query start%3F? (kept)
#fragment%23# (kept)
&param separator%26& (kept)
=param value%3D= (kept)
@auth separator%40@ (kept)
:scheme / port%3A: (kept)
%percent literal%25%25
~unreserved~ (kept)~ (kept)
-_.~unreserved setkept as-iskept as-is

encodeURIComponent so với encodeURI

JavaScript cung cấp hai hàm mã hóa với hành vi rất khác nhau. Chọn sai là một trong những lỗi xử lý URL phổ biến nhất:

encodeURIComponent()
Mã hóa mọi thứ trừ bộ ký tự không dành riêng (A–Z a–z 0–9 - _ . ~). Đây là lựa chọn đúng để mã hóa các giá trị tham số truy vấn riêng lẻ, phân đoạn đường dẫn, hoặc bất kỳ giá trị nào sẽ được nhúng vào trong URL. Nó sẽ mã hóa /, ?, #, & và tất cả các ký tự dành riêng khác.
encodeURI()
Bảo toàn toàn bộ cấu trúc URL bằng cách để các ký tự dành riêng (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) không được mã hóa. Chỉ sử dụng khi bạn có URL đầy đủ với cấu trúc muốn bảo toàn và chỉ cần mã hóa các ký tự không phải ASCII hoặc không hợp lệ trong đó.

Các trường hợp sử dụng phổ biến

Tham số chuỗi truy vấn
Mã hóa các giá trị tham số trước khi thêm vào URL: name=John%20Doe thay vì name=John Doe. Dấu cách và ký tự đặc biệt không được mã hóa sẽ phá vỡ bộ phân tích cú pháp URL và tạo ra kết quả không mong muốn.
Xây dựng yêu cầu API
Các REST API yêu cầu tham số truy vấn được mã hóa đúng cách. Mã hóa giá trị với encodeURIComponent ngăn chặn việc chèn tham số thêm thông qua các ký tự như & và = được nhúng trong giá trị.
Gửi dữ liệu form
Các form HTML gửi dữ liệu dưới dạng application/x-www-form-urlencoded theo mặc định. Hiểu mã hóa phần trăm giúp gỡ lỗi những gì trình duyệt gửi và những gì máy chủ nhận.
Phân đoạn đường dẫn có ký tự đặc biệt
Tên tệp hoặc định danh chứa dấu cách, dấu gạch chéo hoặc ký tự unicode phải được mã hóa phần trăm khi dùng làm phân đoạn đường dẫn URL: /files/my%20document.pdf.
OAuth và token xác thực
OAuth 1.0a và một số giao thức xác thực yêu cầu chuỗi cơ sở được xây dựng từ tên và giá trị tham số mã hóa phần trăm theo thuật toán chuẩn hóa nghiêm ngặt.
Deep link và URL chia sẻ
Khi tạo URL có thể chia sẻ nhúng nội dung người dùng (truy vấn tìm kiếm, trạng thái bộ lọc, tọa độ), mã hóa tất cả các giá trị động để ngăn chặn liên kết bị hỏng và XSS qua thao tác URL.

Ví dụ code

Cách mã hóa chuỗi URL trong các ngôn ngữ và môi trường phổ biến:

JavaScript (browser / Node.js)
// Encode a query parameter value (most common case)
encodeURIComponent('hello world & more') // → "hello%20world%20%26%20more"

// Encode a complete URL (preserves ://?#& structure)
encodeURI('https://example.com/path?q=hello world') // → "https://example.com/path?q=hello%20world"

// Build a query string safely
const params = new URLSearchParams({ q: 'hello world', lang: 'en' })
const url = `https://example.com/search?${params}` // uses + for spaces
Python
from urllib.parse import quote, urlencode, quote_plus

# Encode a path segment or query value
quote('hello world & more')          # → 'hello%20world%20%26%20more'

# Encode for application/x-www-form-urlencoded (space → +)
quote_plus('hello world')            # → 'hello+world'

# Build a query string
urlencode({'q': 'hello world', 'lang': 'en'})  # → 'q=hello+world&lang=en'
Node.js (URL API)
const url = new URL('https://example.com/search')
url.searchParams.set('q', 'hello world & more')
url.searchParams.set('lang', 'en')
console.log(url.toString())
// → https://example.com/search?q=hello+world+%26+more&lang=en
CLI (curl / bash)
# curl automatically percent-encodes --data fields
curl -G "https://example.com/search" --data-urlencode "q=hello world & more"

# Manual encoding with Python one-liner
python3 -c "from urllib.parse import quote; print(quote('hello world'))"

Bộ mã hóa URL vs. các lựa chọn thay thế

Nhiều công cụ có thể mã hóa phần trăm văn bản, nhưng chúng khác nhau về khả năng kiểm soát, quyền riêng tư và ngữ cảnh.

Công cụ này
Dựa trên trình duyệt, tức thì, riêng tư. Hỗ trợ cả hai chế độ encodeURIComponent và encodeURI. Không có dữ liệu nào được gửi đến bất kỳ máy chủ nào. Xử lý đầu vào Unicode đầy đủ.
Thanh địa chỉ trình duyệt
Trình duyệt tự động mã hóa URL khi bạn dán chúng, nhưng chỉ một phần — chúng giữ nguyên nhiều ký tự đặc biệt để dễ đọc. Không phù hợp để mã hóa các giá trị tham số.
URLSearchParams / urllib
Cách tiếp cận lập trình đúng để xây dựng URL trong JavaScript hoặc Python. Dùng công cụ này để mã hóa nhanh một lần hoặc để xác minh những gì code của bạn sẽ tạo ra.

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

Sự khác nhau giữa %20 và + cho dấu cách là gì?
Cả hai đều biểu thị dấu cách, nhưng trong các ngữ cảnh khác nhau. %20 là biểu diễn chuẩn mã hóa phần trăm của dấu cách và hợp lệ ở mọi nơi trong URL. Dấu + biểu thị dấu cách chỉ trong định dạng application/x-www-form-urlencoded (gửi form HTML). Trong đường dẫn URL hoặc giá trị truy vấn thô, + là dấu cộng thực, không phải dấu cách. Dùng %20 để đảm bảo tương thích tối đa.
Khi nào dùng encodeURIComponent so với encodeURI?
Dùng encodeURIComponent cho các giá trị riêng lẻ (tham số truy vấn, phân đoạn đường dẫn, phân đoạn hash). Dùng encodeURI chỉ khi bạn có URL đầy đủ và muốn bảo toàn cấu trúc của nó. Lỗi phổ biến là dùng encodeURI trên giá trị truy vấn — nó sẽ để & và = không mã hóa, phá vỡ chuỗi truy vấn.
Mã hóa URL có xử lý ký tự Unicode không?
Có. Các ký tự không phải ASCII đầu tiên được chuyển đổi sang biểu diễn byte UTF-8, sau đó mỗi byte được mã hóa phần trăm. Ví dụ, ký hiệu euro (U+20AC) mã hóa thành %E2%82%AC — ba byte UTF-8 của nó. Cả encodeURIComponent và encodeURI đều xử lý điều này đúng cách trong tất cả các trình duyệt hiện đại.
Mã hóa kép có phải là vấn đề không?
Có. Nếu bạn mã hóa chuỗi đã mã hóa, %20 trở thành %2520 (bản thân % được mã hóa thành %25). Luôn mã hóa các giá trị thô, không phải những giá trị đã mã hóa trước đó. Khi nghi ngờ, giải mã trước rồi mã hóa lại.
Những ký tự nào luôn an toàn trong URL?
Các ký tự không dành riêng được định nghĩa bởi RFC 3986 luôn an toàn và không bao giờ cần mã hóa: chữ hoa A–Z, chữ thường a–z, chữ số 0–9, gạch nối (-), gạch dưới (_), dấu chấm (.) và dấu ngã (~). Mọi thứ khác nên được mã hóa phần trăm khi dùng làm giá trị thay vì dấu phân cách cấu trúc.
Tại sao một số URL chứa hex chữ hoa (%2F) và một số chữ thường (%2f)?
Cả hai đều hợp lệ. RFC 3986 chỉ định rằng các chuỗi mã hóa phần trăm không phân biệt chữ hoa chữ thường, vì vậy %2F và %2f tương đương. Tuy nhiên, RFC tương tự khuyến nghị sử dụng chữ số thập lục phân viết hoa để nhất quán. Hầu hết các trình duyệt và thư viện tạo ra chữ hoa.
Công cụ này mã hóa toàn bộ URL hay chỉ các tham số?
Cả hai. Dùng chế độ encodeURIComponent để mã hóa các giá trị tham số truy vấn riêng lẻ (trường hợp sử dụng phổ biến nhất). Dùng chế độ encodeURI để mã hóa URL đầy đủ trong khi giữ nguyên các ký tự cấu trúc như ://, ?, # và &.
Có giới hạn độ dài cho mã hóa không?
Không có giới hạn phía máy chủ — công cụ chạy hoàn toàn trong trình duyệt của bạn. Giới hạn thực tế phụ thuộc vào bộ nhớ trình duyệt. Đối với đầu vào rất lớn hoặc xử lý hàng loạt, hãy dùng encodeURIComponent trong một script.

Hướng dẫn theo ngôn ngữ