簡體   English   中英

PHP URL編碼/解碼

[英]PHP URL Encoding / Decoding

我使用了此問題接受的解決方案,例如在/index.php?id=3中通過id進行加密。 問題是我無法將加密值作為網址發送,例如/index.php?id=dsf13f3343f23/23= 因為有時它會在網址中包含奇怪的字符,例如最后注意=符號

應使用urlencode( )轉義URL中傳遞的值中的奇怪字符


例如,以下代碼部分:

echo urlencode('dsf13f3343f23/23=');

會給你:

dsf13f3343f23%2F23%3D

哪個工作正常,作為URL參數。


如果你想用幾個參數構建aquery字符串,請看一下http_build_query()函數。

例如 :

echo http_build_query(array(
    'id' => 'dsf13f3343f23/23=',
    'a' => 'plop',
    'b' => '$^@test', 
));

會給你 :

id=dsf13f3343f23%2F23%3D&a=plop&b=%24%5E%40test

此函數處理參數本身的轉義和連接;-)

在將值放入URL之前,使用PHP的urlencode()函數對值進行編碼。

string urlencode ( string $str )
編碼要在URL的查詢部分中使用的字符串時,此函數很方便,這是將變量傳遞到下一頁的便捷方式。

此函數將“奇怪”字符(例如= )轉換為可安全放入URL的格式。 你可以像這樣使用它:

Header('Location: /index.php?id=' . urlencode($id))

如果使用Base64對URL的二進制值進行編碼,則還有一個帶URL和文件名安全字母變體

您可以使用strtr函數將一個從字母表轉換為另一個:

$base64url = strtr($base64, '+/', '-_');
$base64 = strtr($base64url, '-_', '+/');

因此,您可以使用這些函數對base64url進行編碼和解碼:

function base64url_encode($str) {
    return strtr(base64_encode($str), '+/', '-_'));
}
function base64url_decode($base64url) {
    return base64_decode(strtr($base64url, '-_', '+/'));
}

另請參閱我的答案有關從長md5哈希生成短字母數字字符串的好方法是什么?

加密參數沒有用處。
按原樣發送:

/index.php?id=3 

這沒什么不對。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM