【PHP】URL加密解密(可逆)

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 實體相匹配的變量。像 &amp、&copy 和 &pound 都將被瀏覽器解析,並使用實際實體替代所期待的變量名。這是明顯的混亂,W3C 已經告誡人們好幾年了。參考地址:» http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2

PHP 通過 arg_separator.ini 指令,支持將參數分割符變成 W3C 所建議的分號。不幸的是大多數用戶代理並不發送分號分隔符格式的表單數據。較爲簡單的解決辦法是使用 &amp; 代替 & 作爲分隔符。你不需要爲此修改 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) ;

結果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章