URL加密解密(可逆)
加密:urlencode
urlencode ( string
$str
) : string
此函數便於將字符串編碼並將其用於 URL 的請求部分,同時它還便於將變量傳遞給下一頁。
返回字符串,此字符串中除了 -_. 之外的所有非字母數字字符都將被替換成百分號(%)後跟兩位十六進制數,空格則編碼爲加號(+)。此編碼與 WWW 表單 POST 數據的編碼方式是一樣的,同時與 application/x-www-form-urlencoded 的媒體類型編碼方式一樣。由於歷史原因,此編碼在將空格編碼爲加號(+)方面與 RFC1738 編碼不同。
示例1:
$userInput = "測試";
echo '<a href="mycgi?foo='. urlencode($userInput). '">';
// 結果:<a href="mycgi?foo=%E6%B5%8B%E8%AF%95">
因爲輸出內容爲html標籤,所以查看時需要查看網頁源代碼查看,或者使用htmlentities函數。
$userInput = "測試";
//echo '<a href="mycgi?foo='. urlencode($userInput). '">';
echo htmlentities('<a href="mycgi?foo='. urlencode($userInput). '">');
輸出結果:
(此時是作爲字符串輸出的)
示例2:
多個參數時:
$foo = "測試1";
$bar = "測試2";
$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
echo '<a href="mycgi?' . htmlentities($query_string) . '">';
echo '<a href="mycgi?' . $query_string . '">';
注意:
小心與 HTML 實體相匹配的變量。像 &、© 和 £ 都將被瀏覽器解析,並使用實際實體替代所期待的變量名。這是明顯的混亂,W3C 已經告誡人們好幾年了。參考地址:» http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2。
PHP 通過 arg_separator.ini 指令,支持將參數分割符變成 W3C 所建議的分號。不幸的是大多數用戶代理並不發送分號分隔符格式的表單數據。較爲簡單的解決辦法是使用 & 代替 & 作爲分隔符。你不需要爲此修改 PHP 的 arg_separator。讓它仍爲 &,而僅使用 htmlentities() 或 htmlspecialchars() 對你的 URL 進行編碼。
解密:urldecode
urldecode ( string
$str
) : string
解碼給出的已編碼字符串中的任何 %##。 加號('+')被解碼成一個空格字符。
示例1(整個鏈接的加密解密):
$url = '<a href="http://www.xxx.com/test?foo=測試1&bar=測試2">';
$encodeUrl = urlencode($url);
echo $encodeUrl . "\n";
echo urldecode($encodeUrl);
結果:
示例2(參數的加密解密):
只需把接收到的參數值使用urldecode解密即可
//<a href="mycgi?foo=%E6%B5%8B%E8%AF%951&bar=%E6%B5%8B%E8%AF%952">
$param1 = '%E6%B5%8B%E8%AF%951';
$param2 = '%E6%B5%8B%E8%AF%952';
echo urldecode($param1) . "\n";
echo urldecode($param2) ;
結果: