[英]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, '-_', '+/'));
}
加密參數沒有用處。
按原樣發送:
/index.php?id=3
這沒什么不對。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.