Sử dụng PHP urlencode và urldecode

Trong bài viết này, chúng ta sẽ cùng khám phá về việc mã hóa và giải mã URL bằng PHP. Thật đơn giản và thú vị đấy!

Nhu cầu mã hóa và giải mã URL

Đôi khi, bạn có thể muốn chuyển đổi một URL thành các tham số truy vấn để gửi tới một dịch vụ hoặc trang web khác. Ví dụ, bạn muốn gửi dữ liệu của mình tới một trang web với địa chỉ như sau:

https://code.tutsplus.com?redirect=httpspercent3Apercent2Fpercent2Fdangvoweb.com&author=gialaipc&page=2

Trong ví dụ trên, các ký tự đặc biệt như “:” và “/” trong URL đã được mã hóa thành “%3A” và “%2F” để tránh làm thay đổi cấu trúc chung của URL. Điều này được gọi là “escaping”, và đó là lúc các hàm mã hóa URL được sử dụng.

Máy chủ tại dangvoweb.com sẽ nhận URL đã được mã hóa trong chuỗi truy vấn và có thể sẽ cần giải mã nó sau này. Đó là lúc giải mã URL trở nên quan trọng.

Mã hóa URL với urlencode() và rawurlencode()

PHP cung cấp hai hàm để mã hóa URL: urlencode() và rawurlencode(). Cả hai hàm này đều có vai trò mã hóa URL, tuy nhiên chúng khác nhau về các ký tự được mã hóa và cách xử lý dấu cách.

Trong trường hợp của urlencode(), hàm này thay thế tất cả các ký tự không phải chữ và số (ngoại trừ “-“, ““, và “.”) bằng một ký tự “%”, sau đó là hai ký tự hex tương ứng. Tất cả các dấu cách cũng được thay thế bằng dấu “+”. Ngược lại, hàm rawurlencode() thay thế tất cả các ký tự không phải chữ và số (ngoại trừ “-“, ““, “.”, và “~”) bằng một ký tự “%”, sau đó là hai ký tự hex tương ứng. Hàm này cũng thay thế dấu cách bằng “%20”.

Ví dụ sau sẽ giúp bạn hiểu rõ hơn:

$url_string = 'https://code.tutsplus.com/tutorials?question=php fundamentals&page=2';
$urlencoded_string = urlencode($url_string);
echo $urlencoded_string;
// Kết quả: httpspercent3Apercent2Fpercent2Fcode.tutsplus.compercent2Ftutorialspercent3Fquestionpercent3Dphp+fundamentalspercent26pagepercent3D2

$rawurlencoded_string = rawurlencode($url_string);
echo $rawurlencoded_string;
// Kết quả: httpspercent3Apercent2Fpercent2Fcode.tutsplus.compercent2Ftutorialspercent3Fquestionpercent3Dphppercent20fundamentalspercent26pagepercent3D2

Nói chung, nên sử dụng rawurlencode() để mã hóa URL của bạn. Có một số lí do cho điều này. Thứ nhất, rawurlencode() mã hóa URL dựa trên lược đồ RFC 3986 hiện đại hơn. Thứ hai, nó mang lại tính nhất quán và khả năng tương thích tốt hơn nếu URL của bạn sau này cần được giải mã bằng JavaScript.

Giải mã URL với urldecode() và rawurldecode()

Hàm urldecode() và rawurldecode() được sử dụng để khôi phục các thay đổi được thực hiện bởi các hàm mã hóa URL urlencoe() và rawurlencode().

Đơn giản, điều này có nghĩa là tất cả các chuỗi chứa các ký tự được thay thế bởi % và hai ký tự hex tương ứng sẽ được đổi lại thành các ký tự gốc của chúng. Hàm urldecode() sẽ thay thế dấu “+” bằng một dấu cách, trong khi hàm rawurldecode() không thay đổi.

Dưới đây là ví dụ minh họa:

$urlencoded_string = 'httpspercent3Apercent2Fpercent2Fcode.tutsplus.compercent2Ftutorialspercent3Fquestionpercent3Dphp+fundamentalspercent26pagepercent3D2';
echo urldecode($urlencoded_string);
// Kết quả: https://code.tutsplus.com/tutorials?question=php fundamentals&page=2

echo rawurldecode($urlencoded_string);
// Kết quả: https://code.tutsplus.com/tutorials?question=php+fundamentals&page=2

$rawurlencoded_string = 'httpspercent3Apercent2Fpercent2Fcode.tutsplus.compercent2Ftutorialspercent3Fquestionpercent3Dphppercent20fundamentalspercent26pagepercent3D2';
echo urldecode($rawurlencoded_string);
// Kết quả: https://code.tutsplus.com/tutorials?question=php fundamentals&page=2

echo rawurldecode($rawurlencoded_string);
// Kết quả: https://code.tutsplus.com/tutorials?question=php fundamentals&page=2

Trong ví dụ trên, chúng ta đã sử dụng các hàm giải mã để giải mã các URL mà chúng ta đã mã hóa trong ví dụ trước đó. Biến $urlencoded_string đã thay đổi ký tự dấu cách thành dấu “+”. Sử dụng hàm urldecode() trên chuỗi này sẽ đổi nó trở lại ký tự dấu cách. Tuy nhiên, hàm rawurldecode() không thay đổi.

Biến $rawurlencoded_string có dấu cách được thay thế bằng “%20”, và cả hai hàm urldecode() và rawurldecode() đều xử lý nó theo cùng một cách.

Quan trọng nhất là hãy chú ý đến loại hàm bạn sử dụng để giải mã một URL đã được mã hóa, vì kết quả cuối cùng có thể khác nhau tùy thuộc vào loại mã hóa ban đầu.

Lời kết

Trong bài viết này, chúng ta đã tìm hiểu cách mã hóa và giải mã URL bằng PHP. Chúng ta đã bắt đầu với nhu cầu mã hóa và giải mã URL và sau đó xem xét tổng quan về bốn hàm khác nhau để thực hiện điều đó.

Như tôi đã đề cập trước đó, an toàn nhất là sử dụng rawurlencode() và rawurldecode() trong tất cả các trường hợp. Điều này đảm bảo tính nhất quán trong mã của bạn cũng như khả năng tương thích với các ngôn ngữ khác sử dụng lược đồ mã hóa và giải mã URL hiện đại.

Nếu bạn muốn tìm hiểu thêm về lập trình web và PHP, hãy ghé thăm Dangvoweb.com! Chúng tôi luôn sẵn sàng giúp bạn.

Related Posts

ống Kính Ef Và Rf

Ống kính EF và RF: Định nghĩa và sự khác biệt

Tìm hiểu sự khác nhau giữa ống kính EF và RF của Canon. Bài viết đầy đủ và chi tiết về ống kính ef và rf cho máy ảnh của bạn.

Driver Intel Ac 9560

Giới thiệu về driver Intel AC 9560 – Tìm hiểu về một phần quan trọng của máy tính

Nếu bạn là người dùng máy tính, chắc hẳn bạn đã nghe nói về driver Intel AC 9560. Đây là một thành phần quan trọng của máy…

Sm Bus Controller Driver Windows 7

Hướng dẫn cài đặt SM Bus Controller driver cho Windows 7

Huong dan cai dat sm bus controller driver cho Windows 7 de giai quyet van de lien quan den bo dieu khien va tang toc do hoat dong he thong. Tai driver ngay!

Meme Ngày Mới

Giảm Stress Một Cách Hiệu Quả Với Meme Ngày Mới

Tìm hiểu cách xem và chia sẻ meme ngày mới để giảm stress và tăng cảm giác hạnh phúc. Bài viết hướng dẫn tìm kiếm và chia sẻ meme ngày mới hiệu quả.

Cách Chế Tạo Lò Luyện Kim Trong Minecraft

Cách tạo lò luyện kim trong Minecraft

Tìm hiểu cách chế tạo lò luyện kim trong Minecraft để tạo ra các vật phẩm quý giá như kim cương, vàng, sắt, giáp và vũ khí. Hãy đọc bài viết ngay!

Kabaneri Of The Iron Fortress Ss2

Kabaneri of the Iron Fortress SS2 – Tất cả những điều bạn cần biết

Khám phá tất cả những gì bạn cần biết về Kabaneri of the Iron Fortress SS2 – The Battle of Unato, bộ anime được mong đợi nhất của năm 2021.