在 Web 開發中,經常需要獲取上一頁的完整 URL 路徑以便在登出、重定向等場景下返回原頁面。雖然可以使用 JavaScript 的 window.history.go(-1) 實現返回,但若需在伺服端處理(如登出後跳回原頁),則必須妥善處理 URL 中的參數傳遞問題。
假設當前頁面 URL 為:
https://xxx/module.php?module=groupbook&view=index&id=2
若直接使用 $_SERVER['REQUEST_URI'] 獲取路徑並作為參數傳遞給登出頁面:
https://xxx/login.php?op=logout&return=https://xxx/module.php?module=groupbook&view=index&id=2
接收端解析 return 參數時,會將第一個 & 視為分隔符,導致實際獲得的值僅為 https://xxx/module.php?module=groupbook,後續參數丟失。
在傳遞前對完整 URL 進行編碼,即可保留所有特殊字符:
$returnUrl = urlencode($_SERVER['REQUEST_URI']);
// 生成的跳轉鏈接
$logoutUrl = "https://xxx/login.php?op=logout&return={$returnUrl}";
接收端使用 urldecode() 還原即可獲得完整原始路徑。
rawurlencode() 符合 RFC 3986 標準http_build_query() 構建複雜查詢字符串更安全掌握此技巧,可有效避免多參數 URL 傳遞時的截斷問題,保障業務流程完整性。