Công cụ URL Encode và Decode

Trang chủ / Công cụ / Coding / Công cụ URL Encode và Decode
Sử dụng miễn phí Xử lý trực tiếp trên trình duyệt Kết quả tức thì
🤖 Chưa rõ cách dùng? Hỏi AI hướng dẫn

Tham số: mã hóa mọi ký tự cấu trúc (&, =, /, ?) — dùng cho giá trị của một tham số.

Nhập nội dung để xem kết quả.

Quy tắc chuyển đổi theo từng phạm vi

Tham Số: giữ nguyên A–Z a–z 0–9 và - _ . ! ~ * ' ( ); còn lại thành %HH (khoảng trắng → %20, dấu + thật → %2B). Dấu + trong đầu vào khi giải mã được giữ nguyên là dấu +.

URL đầy đủ: giữ nguyên cấu trúc : / ? # [ ] @ ! $ & ' ( ) * + , ; = nên https:// vẫn dùng được; chỉ mã hóa khoảng trắng, ký tự có dấu và ký tự không hợp lệ.

Form (dấu +): giống Tham Số nhưng khoảng trắng thành dấu + khi mã hóa, và dấu + thành khoảng trắng khi giải mã — chỉ dùng cho dữ liệu form (application/x-www-form-urlencoded).

Mỗi thao tác chỉ chuyển đổi một lớp. Chuỗi đã mã hóa 2 lớp cần giải mã 2 lần — nút “Giải mã thêm 1 lớp” chỉ hiện khi kết quả còn nhóm %HH hợp lệ. Mọi xử lý chạy ngay trong trình duyệt, không gửi dữ liệu đi đâu.

Hướng dẫn nhanh ⏱ Thời gian: 1 phút

Hướng dẫn sử dụng Công cụ URL Encode và Decode

Thực hiện theo 4 bước dưới đây để mã hóa hoặc giải mã văn bản, URL theo đúng phạm vi và sao chép kết quả.

Bước1

Nhập nội dung và chọn phạm vi

Nhập hoặc dán nội dung cần xử lý vào ô “Dữ liệu đầu vào (Input)”, rồi chọn phạm vi “Tham Số”, “URL đầy đủ” hoặc “Form (dấu +)”.

💡 Mẹo: Dùng “Tham Số” cho giá trị của một tham số, “URL đầy đủ” khi cần giữ nguyên cấu trúc địa chỉ, “Form (dấu +)” chỉ cho dữ liệu biểu mẫu.
Bước2

Chọn chế độ mã hóa hoặc giải mã

Nhấn “Mã hóa (Encode)” để mã hóa nội dung đã nhập, hoặc nhấn “Giải mã (Decode)” để chuyển nội dung đã mã hóa về dạng đọc được; kết quả tính trực tiếp khi bạn gõ.

💡 Mẹo: Nếu decode báo lỗi, hãy kiểm tra các nhóm % trong đầu vào — ô kết quả sẽ trống cho đến khi đầu vào hợp lệ.
Bước3

Đảo chiều hoặc giải mã thêm 1 lớp

Nhấn “Đảo chiều” để đưa kết quả hiện tại thành đầu vào và đổi chiều mã hóa/giải mã; nhấn “Giải mã thêm 1 lớp” khi nút này hiện ra sau một lần decode còn nhóm %HH.

💡 Mẹo: Chỉ giải mã thêm lớp khi bạn biết dữ liệu còn lớp encode thừa — nhóm % có thể chính là nội dung cần giữ.
Bước4

Sao chép, tải hoặc làm mới

Xem nội dung trong ô “Kết quả (Output)”, rồi nhấn “Sao chép kết quả” để sao chép, “Tải txt” để tải file kết quả, hoặc “Làm mới” để nhập nội dung mới.

💡 Mẹo: Nhấn “Làm mới” sẽ đưa chế độ về “Mã hóa (Encode)” và phạm vi về “Tham Số” trước khi bạn nhập nội dung mới.

Nội Dung

Công cụ URL Encode và Decode là gì?

Công cụ URL Encode và Decode chuyển đổi giữa văn bản thông thường và dạng biểu diễn percent-encoding. URL encode biểu diễn những ký tự cần chuyển đổi bằng các nhóm bắt đầu với dấu phần trăm; URL decode khôi phục biểu diễn đó về nội dung tương ứng. Nhu cầu thường gặp là chuẩn bị một giá trị tham số hoặc đọc lại chuỗi có nhiều nhóm như %20, %C3%A0.

Công cụ có ba phạm vi chọn ngay trên giao diện: “Tham Số” (mặc định, xử lý đầu vào như giá trị của một tham số), “URL đầy đủ” (giữ nguyên cấu trúc : / ? # & = nên https:// vẫn dùng được) và “Form (dấu +)” (dành cho dữ liệu biểu mẫu). Vì vậy, dán cả URL rồi encode ở phạm vi “Tham Số” sẽ chuyển đổi cả những dấu vốn dùng để tạo cấu trúc địa chỉ; muốn giữ cấu trúc thì chọn “URL đầy đủ”.

Từ “mã hóa” và “giải mã” ở đây nói về chuyển đổi biểu diễn, không phải bảo vệ dữ liệu bằng mật khẩu. Công cụ không tạo hash, không xác minh chữ ký và không khiến nội dung trở thành bí mật. Người có chuỗi đã encode thường có thể decode để đọc lại.

Bài viết giải thích cách hiểu đầu vào, đầu ra và các trường hợp dễ nhầm dựa trên Logic của công cụ. Kết quả của công cụ là một chuỗi đã chuyển đổi, không phải báo cáo xác nhận địa chỉ tồn tại, an toàn hoặc truy cập được.

Minh họa công cụ URL Encode và Decode chuyển văn bản thường thành các nhóm percent-encoding như và rồi giải mã ngược lại, phạm vi mặc định xử lý đầu vào như một giá trị tham số, phạm vi “URL đầy đủ” giữ nguyên cấu trúc
URL Encode và Decode chuyển đổi hai chiều giữa văn bản thường và percent-encoding; phạm vi mặc định “Tham Số” xử lý cả chuỗi như một giá trị tham số, còn phạm vi “URL đầy đủ” giữ nguyên cấu trúc địa chỉ.

Năm thuật ngữ cần hiểu khi URL encode và decode

Percent-encoding

Percent-encoding là cách biểu diễn một byte bằng dấu % và hai chữ số hệ thập lục phân, thường viết khái quát là %HH. Ví dụ, %20 biểu diễn byte của khoảng trắng thông thường. Đây là nền tảng để đọc kết quả công cụ. Điểm dễ nhầm là xem mỗi nhóm như một ký tự hoàn chỉnh: chữ có dấu có thể cần nhiều byte, nên tạo nhiều nhóm. Cách biểu diễn này cũng không có khóa bí mật như mã hóa bảo mật.

Thành phần URL

Thành phần URL là một phần của địa chỉ, chẳng hạn giá trị của tham số truy vấn, thay vì toàn bộ địa chỉ có đầy đủ dấu phân cách. Khi chuẩn bị dữ liệu tìm kiếm, phần cần encode thường là nội dung tìm kiếm. Ở phạm vi mặc định “Tham Số”, công cụ xử lý cả đầu vào theo cách dành cho một thành phần, nhưng không biết bạn đã chọn đúng phần hay chưa; phạm vi “URL đầy đủ” thì giữ nguyên cấu trúc địa chỉ. Vì thế, encode một giá trị và encode nguyên địa chỉ là hai mục tiêu khác nhau.

Ký tự dành riêng

Ký tự dành riêng là những ký tự có thể mang vai trò cấu trúc trong URL, tùy vị trí sử dụng. Dấu hỏi có thể mở phần truy vấn; dấu ampersand có thể phân cách các tham số. Nếu chúng thuộc nội dung một giá trị, encode giúp phân biệt nội dung với dấu phân cách. Tuy nhiên, không nên hiểu rằng mọi dấu câu đều được xử lý giống nhau: phạm vi “Tham Số” mã hóa cả dấu cấu trúc, còn phạm vi “URL đầy đủ” giữ nguyên chúng.

UTF-8

UTF-8 là cách biểu diễn ký tự Unicode bằng một hoặc nhiều byte. Trong luồng encode trên trình duyệt, các ký tự Unicode hợp lệ được biểu diễn bằng byte UTF-8 rồi chuyển thành những nhóm phần trăm tương ứng. Điều này giải thích vì sao chữ tiếng Việt có thể làm chuỗi đầu ra dài hơn. Nhiều nhóm nối tiếp nhau không tự động có nghĩa văn bản bị hỏng; điều quan trọng khi decode là các byte phải tạo thành dữ liệu UTF-8 hợp lệ.

Mã hóa nhiều lớp

Mã hóa nhiều lớp xảy ra khi chuỗi đã encode tiếp tục được encode. Dấu phần trăm của lớp trước lúc này trở thành %25, khiến biểu diễn có thêm một lớp bao ngoài. Công cụ không tự xác định số lớp hoặc liên tục giải mã đến khi hết dấu phần trăm. Người dùng cần biết dữ liệu ở giai đoạn nào, bởi một nhóm %20 đôi khi chính là nội dung cần giữ, chứ không phải khoảng trắng cần khôi phục ngay.

Năm thuật ngữ khi URL encode và decode: percent-encoding %HH theo từng byte, thành phần URL, ký tự dành riêng như ? Và &, UTF-8 nhiều byte cho một ký tự và mã hóa nhiều lớp với
Một ký tự có dấu có thể tạo nhiều nhóm %HH vì được biểu diễn bằng nhiều byte UTF-8; dấu % của lớp trước trở thành %25 khi bị encode thêm một lớp.

Đầu vào và đầu ra cần được hiểu như thế nào?

Chuỗi nào có thể đưa vào công cụ?

Đầu vào là chuỗi văn bản, không có đơn vị đo. Chuỗi có thể chứa tiếng Việt, chữ số, khoảng trắng, dấu câu, một URL hoặc các nhóm percent-encoding. Việc ô nhập nhận một địa chỉ không có nghĩa công cụ sẽ kiểm tra địa chỉ đó; cách xử lý vẫn dựa trên toàn bộ nội dung đã nhập và phạm vi bạn đã chọn.

Công cụ tính trực tiếp khi bạn gõ: chuỗi rỗng khác chuỗi chỉ chứa khoảng trắng. Khi không có ký tự nào, ô kết quả cũng trống và dòng trạng thái hiện “Nhập nội dung để xem kết quả.”. Nếu có một khoảng trắng thông thường, thao tác vẫn được thực hiện; ở phạm vi “Tham Số”, encode cho %20. Không có bước tự động cắt khoảng trắng ở đầu hoặc cuối.

Decode trên trình duyệt cần các nhóm phần trăm đúng định dạng và dữ liệu UTF-8 hợp lệ. Công cụ không có chức năng được xác nhận để đoán ký tự bị thiếu hoặc tự sửa chuỗi sai. Với văn bản Unicode không hợp lệ, thao tác encode cũng có thể phát sinh lỗi.

Cách đọc kết quả và trạng thái chưa có kết quả

Ô đầu ra chỉ đọc, dùng để hiển thị chuỗi sau chuyển đổi. Công cụ tính trực tiếp khi bạn gõ hoặc đổi chế độ/phạm vi: đầu vào rỗng thì ô kết quả trống, decode lỗi thì ô kết quả cũng trống kèm thông báo lỗi ngay dưới ô nhập. Vì vậy, ô kết quả không bao giờ giữ lại kết quả của lần chuyển đổi trước khi đầu vào hiện tại đã thay đổi; dòng trạng thái dưới ô kết quả (số ký tự đầu vào/kết quả và số nhóm %HH) cho biết kết quả có tương ứng với đầu vào hiện tại hay không.

Nút “Làm mới” xóa ô nhập, đưa chế độ về “Mã hóa (Encode)” và phạm vi về “Tham Số”. Nút “Sao chép kết quả” sao chép nội dung đầu ra và hiện thông báo “Đã sao chép!”; nút “Đảo chiều” đưa kết quả hiện tại thành đầu vào và đổi chiều mã hóa/giải mã; nút “Tải txt” tải kết quả về file url-encode-decode.txt. Khi chưa có kết quả, các nút này hiện thông báo tương ứng thay vì thực hiện thao tác rỗng. Ba nút ví dụ mẫu (tìm kiếm tiếng Việt, C++, URL đầy đủ) tự đặt đúng chế độ và phạm vi cho từng ví dụ.

Đầu vào và đầu ra của công cụ URL Encode Decode: chuỗi rỗng cho kết quả trống, một khoảng trắng vẫn được encode thành %20, ô kết quả chỉ đọc và trống khi decode báo lỗi
Ô kết quả tính trực tiếp: đầu vào rỗng thì kết quả trống, decode lỗi hiện thông báo và ô kết quả cũng trống, không giữ kết quả cũ.

Quy tắc chuyển đổi ký tự, khoảng trắng và dấu cộng

Ký tự nào được giữ nguyên hoặc chuyển thành %HH?

Ở phạm vi “Tham Số”, encode giữ nguyên chữ cái Latin không dấu, chữ số và các ký tự - _ . ! ~ * ' ( ). Những ký tự khác được chuyển đổi theo quy tắc của hàm encode thành phần URL. Ở phạm vi “URL đầy đủ”, encode giữ thêm cả các dấu tạo cấu trúc như : / ? # @ ! $ & ' ( ) * + , ; =, nên địa chỉ vẫn giữ dạng dùng được. Với Unicode hợp lệ, mỗi byte UTF-8 cần chuyển đổi được viết thành một nhóm phần trăm và hai chữ số hệ thập lục phân.

Các dấu tạo cấu trúc như dấu hai chấm, gạch chéo, dấu hỏi, dấu bằng và ampersand bị encode nếu có trong đầu vào ở phạm vi “Tham Số” và “Form (dấu +)”, nhưng được giữ nguyên ở phạm vi “URL đầy đủ”. Công cụ không tự đoán phạm vi giúp bạn: chọn “URL đầy đủ” khi đầu vào là một địa chỉ cần giữ cấu trúc, chọn “Tham Số” khi đầu vào là giá trị của một tham số.

Vì sao dấu cộng và khoảng trắng dễ gây nhầm?

Khi encode ở phạm vi “Tham Số”, khoảng trắng thông thường thành %20, dấu cộng thành %2B, còn dấu phần trăm thành %25. Đây là ba chuyển đổi riêng, không nên xem dấu cộng và khoảng trắng như cùng một ký tự trong mọi ngữ cảnh.

Riêng về dấu cộng khi decode, chỉ phạm vi “Form (dấu +)” thay dấu cộng trực tiếp bằng khoảng trắng trước khi giải mã — quy tắc này phù hợp với dữ liệu biểu mẫu, nhưng có thể làm đổi nội dung chứa dấu cộng thật. Ở phạm vi “Tham Số” và “URL đầy đủ”, dấu cộng trực tiếp được giữ nguyên. Ngược lại, ở cả ba phạm vi, %2B đều được khôi phục thành dấu cộng. Khi encode, chỉ phạm vi “Form (dấu +)” đổi khoảng trắng thành dấu cộng; hai phạm vi còn lại dùng %20.

Một thao tác chỉ chuyển đổi một lớp

Mỗi lần decode chỉ gỡ một lớp percent-encoding. Nếu một lần xử lý khôi phục dấu phần trăm và tạo ra chuỗi trông như %20, chuỗi vừa xuất hiện không được giải mã tiếp trong cùng lần đó. Mọi thao tác đều đọc ô đầu vào, không tự lấy ô kết quả làm dữ liệu cho lần kế tiếp.

Khi decode gặp định dạng sai hoặc dữ liệu UTF-8 không hợp lệ, công cụ hiện thông báo lỗi và để ô kết quả trống, không giữ kết quả cũ. Encode không có nhánh bắt lỗi riêng tương tự cho trường hợp Unicode chứa đơn vị mã surrogate đơn lẻ không hợp lệ. Đây là giới hạn xử lý lỗi, không phải dấu hiệu công cụ đã sửa được dữ liệu.

Quy tắc URL encode: giữ nguyên chữ cái Latin, chữ số và các ký tự - _. ! ~ * ' ( ), khoảng trắng thành, dấu cộng thành, dấu phần trăm thành và mỗi thao tác chỉ chuyển đổi một lớp
Encode và decode là ba chuyển đổi riêng cho khoảng trắng, dấu cộng và dấu phần trăm; mỗi lần decode chỉ gỡ một lớp percent-encoding.

Ví dụ URL encode và decode trong các tình huống thực tế

Các ví dụ sau được tính theo logic của công cụ JavaScript và quy tắc của các hàm chuẩn. Đầu vào đều là dữ liệu giả định, không có đơn vị đo; các ví dụ văn bản giả định Unicode hợp lệ.

Giá trị tìm kiếm có chữ tiếng Việt

Giả sử bạn muốn biểu diễn giá trị tìm kiếm cà phê để đưa vào một tham số. Encode trên trình duyệt cho c%C3%A0%20ph%C3%AA. Các chữ c, p, h được giữ nguyên; khoảng trắng thành %20.

Chữ à có các byte UTF-8 C3 A0 nên thành %C3%A0; chữ ê có các byte C3 AA nên thành %C3%AA. Kết quả chỉ là giá trị đã encode, chưa bao gồm tên tham số hoặc phần còn lại của địa chỉ. Decode chuỗi này theo cùng luồng khôi phục nội dung tiếng Việt ban đầu.

Nội dung có dấu cộng cần giữ nguyên

Giả sử nội dung cần đọc là tên ngôn ngữ C++. Ở phạm vi mặc định “Tham Số” và phạm vi “URL đầy đủ”, đưa trực tiếp chuỗi đó vào decode vẫn giữ nguyên C++, vì hai phạm vi này không đổi dấu cộng thành khoảng trắng. Chỉ ở phạm vi “Form (dấu +)”, hai dấu cộng mới bị đổi thành hai khoảng trắng, vì phạm vi này hiểu dấu cộng là khoảng trắng của dữ liệu biểu mẫu.

Nếu đầu vào là C%2B%2B, decode ở cả ba phạm vi đều cho C++, vì hai nhóm %2B khôi phục đúng hai dấu cộng. Ví dụ cho thấy cần phân biệt nội dung nguyên bản với biểu diễn đã encode của nội dung đó, và cần chọn đúng phạm vi trước khi decode.

Một URL đầy đủ và chuỗi đã encode nhiều lớp

Với địa chỉ minh họa https://example.com/?q=a b&n=1, ở phạm vi “Tham Số”, encode toàn bộ chuỗi cho https%3A%2F%2Fexample.com%2F%3Fq%3Da%20b%26n%3D1: dấu hai chấm, gạch chéo và các dấu phân cách tham số đều đã chuyển đổi, phù hợp khi cần biểu diễn nguyên địa chỉ như một giá trị. Ở phạm vi “URL đầy đủ”, cùng địa chỉ cho https://example.com/?q=a%20b&n=1: cấu trúc được giữ nguyên, chỉ khoảng trắng và ký tự có dấu bị mã hóa, nên kết quả vẫn dùng được như một địa chỉ. Dù ở phạm vi nào, cũng không nên máy móc thay chuỗi đã encode toàn bộ ở phạm vi “Tham Số” cho URL gốc để truy cập.

Ở ví dụ nhiều lớp, encode đầu vào a%20b cho a%2520b. Nếu lấy kết quả ấy làm đầu vào decode đúng một lần, đầu ra là a%20b, chưa phải a b. Việc có nên decode tiếp phụ thuộc mục đích dữ liệu: chuỗi phần trăm có thể là biểu diễn trung gian hoặc nội dung cần giữ nguyên. Khi decode mà kết quả vẫn còn nhóm %HH hợp lệ, nút “Giải mã thêm 1 lớp” sẽ hiện ra; nhấn nút này đưa kết quả làm đầu vào và giải mã thêm một lớp, thay vì phải sao chép thủ công.

Chuỗi phần trăm không hợp lệ

Giả sử đầu vào decode là %ZZ. Vì Z không phải chữ số hệ thập lục phân, công cụ hiện thông báo lỗi ngay dưới ô nhập và ô kết quả trống, đồng thời dòng trạng thái hiện “Chưa có kết quả vì đầu vào không hợp lệ.”. Nội dung trống này không phải bản khôi phục thành công của %ZZ; muốn giữ dấu % thật, hãy viết thành %25.

Ví dụ URL encode và decode: cà phê thành cph, C khôi phục thành C++, encode nhiều lớp ab thành a20b và chuỗi %ZZ không hợp lệ bị cảnh báo
Ở phạm vi “Form (dấu +)”, muốn giữ dấu cộng khi decode phải dùng dạng %2B; ở phạm vi “Tham Số” và “URL đầy đủ”, dấu cộng trực tiếp đã được giữ nguyên. Decode một lần chuỗi nhiều lớp chỉ gỡ được lớp ngoài cùng.

Khi nào nên dùng công cụ URL Encode và Decode?

Chuẩn bị giá trị tham số

Công cụ hữu ích khi cần chuẩn bị một giá trị có khoảng trắng, tiếng Việt hoặc dấu có thể bị hiểu là dấu phân cách. Ví dụ, nội dung tìm kiếm có ampersand cần được biểu diễn như một phần của giá trị, thay vì vô tình tạo ranh giới giữa các tham số.

Điều quan trọng là chọn đúng phần dữ liệu muốn chuyển đổi. Nếu nhu cầu là encode nội dung tìm kiếm, hãy xem đó là giá trị riêng, không đồng nhất với toàn bộ địa chỉ. Công cụ không tự ghép URL từ các thành phần, cũng không xác định hệ thống đích muốn nhận dạng biểu diễn nào.

Khi tìm hiểu cách xử lý, nên dùng chuỗi giả định hoặc đã loại bỏ thông tin nhạy cảm. Điều này giúp tập trung vào khác biệt giữa các ký tự mà không cần đưa dữ liệu cá nhân vào quá trình thử đối chiếu.

Đọc và đối chiếu dữ liệu đã encode

Decode có thể hỗ trợ đọc một giá trị percent-encoded được lấy từ đường dẫn, phần truy vấn hoặc dữ liệu chia sẻ. Khi tách được phần cần đọc, bạn có thể đối chiếu trước và sau chuyển đổi để nhận ra khoảng trắng, dấu cộng hay lớp encode thừa.

Tuy nhiên, nội dung trở nên dễ đọc không chứng minh nguồn dữ liệu đáng tin. Công cụ không có chức năng được xác nhận để gửi yêu cầu tới địa chỉ nhập vào, kiểm tra tham số được hệ thống đích chấp nhận hoặc chứng minh đường dẫn còn hoạt động. Giá trị sử dụng ở đây là quan sát biểu diễn chuỗi, không phải kiểm tra hành vi của một dịch vụ.

Khi nào nên dùng URL Encode Decode: chuẩn bị giá trị tham số chứa khoảng trắng, tiếng Việt hoặc dấu phân cách, và decode để đọc lại dữ liệu percent-encoding trong đường dẫn hay phần truy vấn
Hãy encode đúng giá trị cần chuyển đổi thay vì cả địa chỉ, và dùng chuỗi giả định khi thử đối chiếu để tránh đưa dữ liệu nhạy cảm vào công cụ.

Xử lý trên trình duyệt theo từng phạm vi và mã hóa Base64

Khác biệt giữa ba phạm vi của công cụ

Bản mới chỉ có một luồng xử lý duy nhất, chạy hoàn toàn trên trình duyệt và không gửi dữ liệu lên máy chủ, nhưng kết quả khác nhau theo phạm vi bạn chọn:

Tình huống Tham Số URL đầy đủ Form (dấu +)
Decode a+b Giữ a+b Giữ a+b Cho a b
Encode khoảng trắng Cho %20 Cho %20 Cho +
Encode dấu cấu trúc : / ? & = Chuyển thành percent-encoding Giữ nguyên Chuyển thành percent-encoding
Decode byte không tạo UTF-8 hợp lệ Hiện lỗi, ô kết quả trống Hiện lỗi, ô kết quả trống Hiện lỗi, ô kết quả trống

Ở cả ba phạm vi, decode gặp byte không tạo UTF-8 hợp lệ đều hiện thông báo lỗi và để ô kết quả trống; không còn luồng dự phòng nào cho kết quả khác.

Khi JavaScript bị tắt, công cụ không hoạt động vì bản mới không còn biểu mẫu dự phòng gửi lên máy chủ.

URL encode không phải Base64 hoặc mã hóa bảo mật

Về kiến thức nền, percent-encoding biểu diễn byte bằng nhóm %HH, còn Base64 biểu diễn dữ liệu bằng một bảng ký tự khác. Hai cách có quy tắc và mục đích sử dụng khác nhau; không thể coi decode URL là thao tác đọc mọi chuỗi Base64.

Nếu cần phân biệt dạng dữ liệu, công cụ mã hóa và giải mã Base64 thuộc một chủ đề chuyển đổi khác, không phải tính năng tích hợp được xác nhận của công cụ này. Cả hai cách biểu diễn đều không mặc nhiên tạo tính bí mật, không thay thế mã hóa bằng khóa và không xác minh nguồn gốc nội dung.

So sánh URL encode trên trình duyệt theo từng phạm vi và Base64: khác nhau ở cách decode dấu cộng a+b theo phạm vi, và cách xử lý byte UTF-8 không hợp lệ
Phạm vi “Form (dấu +)” decode đổi a+b thành a b, hai phạm vi còn lại giữ nguyên a+b; percent-encoding cũng khác hẳn Base64.

Giới hạn và lưu ý trước khi sử dụng kết quả

Không dùng URL encode để bảo vệ bí mật

Chuỗi encode vẫn có thể được khôi phục bằng quy tắc công khai. Vì vậy, không nên dùng percent-encoding để che mật khẩu, thông tin tài khoản hoặc dữ liệu cá nhân. Việc văn bản trông khó đọc hơn không có nghĩa người khác không thể đọc lại.

Tương tự, đầu ra không chứng minh một URL hợp lệ, an toàn hay truy cập được. Một chuỗi có thể được chuyển đổi đúng về mặt biểu diễn nhưng vẫn chứa địa chỉ sai, tham số không phù hợp hoặc nội dung không đáng tin.

Những điều chưa thể xác minh từ công cụ

Bản mới của công cụ chạy hoàn toàn trên trình duyệt: mã không gửi đầu vào lên máy chủ và không có biểu mẫu dự phòng nào. Tuy vậy, chính sách lưu trữ, nhật ký và hoạt động của các thành phần khác trên toàn trang vẫn chưa được xác minh từ riêng công cụ này. Việc triển khai thực tế và khả năng sao chép trong từng môi trường cũng chưa được kiểm chứng.

Mã không đặt trực tiếp một ngưỡng độ dài đầu vào, nhưng điều đó không đồng nghĩa xử lý không giới hạn. Trình duyệt và tài nguyên máy vẫn có thể ảnh hưởng khi đầu vào rất dài. Với sao chép, công cụ có cách dự phòng khi cách chính thất bại, nhưng thông báo “Đã sao chép!” vẫn không bảo đảm tuyệt đối trong mọi môi trường trình duyệt.

Trước khi sử dụng kết quả, hãy kiểm tra ba điều: đúng thành phần cần chuyển đổi, đúng số lớp mã hóa và đúng ý nghĩa của dấu cộng. Đây là những yếu tố quyết định chuỗi có còn phản ánh nội dung bạn muốn hay không.

Giới hạn của URL Encode: không dùng để bảo vệ mật khẩu hay bí mật vì ai cũng decode lại được, đầu ra không chứng minh URL hợp lệ hay an toàn và cần kiểm tra đúng thành phần, đúng số lớp, đúng nghĩa dấu cộng
Trước khi dùng kết quả hãy kiểm tra ba điều: đúng thành phần cần chuyển đổi, đúng số lớp mã hóa và đúng ý nghĩa của dấu cộng.

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

Tôi nên encode cả URL hay chỉ giá trị của một tham số?

Thông thường, nếu đang chuẩn bị nội dung cho một tham số, bạn chỉ nên encode giá trị đó. Encode cả URL phù hợp với mục tiêu khác: biểu diễn nguyên địa chỉ như dữ liệu nằm bên trong một giá trị — đó chính là cách phạm vi “Tham Số” xử lý. Nếu muốn giữ cấu trúc địa chỉ để dùng tiếp, hãy chọn phạm vi “URL đầy đủ” thay vì encode toàn chuỗi ở phạm vi “Tham Số”. Vì vậy, cần xác định kết quả sẽ được đặt vào đâu; đừng dùng chuỗi đã encode toàn bộ thay cho địa chỉ truy cập chỉ vì nó được tạo thành công.

Vì sao chuỗi C++ bị đổi khi decode và làm sao giữ dấu cộng?

Chỉ ở phạm vi “Form (dấu +)”, các dấu cộng trực tiếp mới bị đổi thành khoảng trắng trước khi decode. Do đó, ở phạm vi này, đầu vào C++ không còn giữ hai dấu cộng sau thao tác; ở phạm vi “Tham Số” và “URL đầy đủ”, C++ được giữ nguyên. Muốn khôi phục dấu cộng từ dạng đã encode, biểu diễn tương ứng là %2B, nên C%2B%2B sẽ cho C++. Nếu nội dung đã là văn bản nguyên bản và bạn chỉ muốn giữ nó, có thể không cần decode; trước hết hãy xác định nó thực sự đã được encode hay chưa.

Khoảng trắng nên được biểu diễn bằng %20 hay dấu cộng?

Công cụ encode khoảng trắng thông thường thành %20. Dấu cộng có thể được dùng để biểu diễn khoảng trắng trong quy ước dữ liệu biểu mẫu, nhưng không mang nghĩa đó trong mọi tình huống URL. Chỉ phạm vi “Form (dấu +)” của công cụ áp dụng cách hiểu dấu cộng là khoảng trắng khi decode; phạm vi “Tham Số” và “URL đầy đủ” giữ nguyên dấu cộng. Vì vậy, khi trao đổi dữ liệu với hệ thống khác, nên căn cứ định dạng hệ thống đó yêu cầu, thay vì tự thay mọi %20 bằng dấu cộng.

Vì sao công cụ báo lỗi decode và ô kết quả trống?

Vì bản mới không giữ kết quả cũ khi gặp lỗi: decode sai định dạng sẽ hiện thông báo lỗi ngay dưới ô nhập, ô kết quả trống và dòng trạng thái hiện “Chưa có kết quả vì đầu vào không hợp lệ.”. Một trạng thái khác là ô đầu vào rỗng: không có lỗi, ô kết quả cũng trống và dòng trạng thái hiện “Nhập nội dung để xem kết quả.”. Bạn nên phân biệt hai trạng thái này trước khi sao chép, đặc biệt nếu đang đối chiếu nhiều chuỗi liên tiếp.

Tại sao decode một lần vẫn còn các nhóm %HH?

Chuỗi có thể đã được encode nhiều lớp, hoặc các nhóm phần trăm chính là nội dung được lưu có chủ ý. Một lần decode chỉ xử lý lớp hiện có, không tiếp tục giải mã những nhóm vừa được khôi phục. Chẳng hạn, a%2520b trở thành a%20b sau một lần. Chỉ nên xử lý tiếp khi biết dữ liệu cần bỏ thêm lớp; việc lặp vô điều kiện có thể thay đổi nội dung vốn phải giữ nguyên dưới dạng chữ và dấu phần trăm. Khi decode mà kết quả vẫn còn nhóm %HH hợp lệ, nút “Giải mã thêm 1 lớp” sẽ hiện ra để giải mã thêm đúng một lớp mà không cần sao chép thủ công.

Khi tắt JavaScript, tôi có chọn decode trên giao diện được không?

Không. Bản mới của công cụ chạy hoàn toàn bằng JavaScript trên trình duyệt và không còn biểu mẫu dự phòng gửi lên máy chủ, nên khi JavaScript bị tắt, các nút chuyển đổi sẽ không hoạt động. Vì thế, cần bật JavaScript để dùng công cụ này.

Tôi có nên đưa mật khẩu hoặc dữ liệu cá nhân vào công cụ không?

Không nên đưa dữ liệu nhạy cảm vào chỉ để tìm hiểu hoặc thử chuyển đổi; hãy dùng nội dung giả định hay đã loại bỏ thông tin riêng. Percent-encoding không bảo vệ bí mật, và chính sách truyền, lưu dữ liệu của toàn trang chưa được xác minh từ công cụ. Riêng bản thân công cụ mới không gửi nội dung nhập lên máy chủ — mọi chuyển đổi chạy ngay trên trình duyệt của bạn. Nếu nhu cầu liên quan dữ liệu thật, bạn cần đánh giá môi trường và chính sách xử lý dữ liệu, không dựa vào vẻ ngoài khó đọc của chuỗi encode.

Tài liệu tham khảo

Bình luận vui vẻ - Yêu cầu nâng cấp

Cáo trợ lý