// 編碼跳轉
header('Location: redirect.php?message=' . base64_encode('修改成功'));
// 解碼顯示
echo base64_decode($_GET['message']); // 亂碼
Base64 編碼字元集包含 + / =。URL 傳輸時 + 被解析為空格,導致解碼失敗。
$str = base64_decode(str_replace(' ', '+', $_GET['str']));
// 導向端
function _alert(bool $success, string $msg, int $time = 3, string $url = '/') {
header('Location: /include/redirect.php?success=' . (int)$success
. '&message=' . base64_encode($msg)
. '&time=' . $time
. '&url=' . base64_encode($url));
exit;
}
// 接收端 redirect.php
$message = base64_decode(str_replace(' ', '+', $_GET['message']));
$url = base64_decode(str_replace(' ', '+', $_GET['url']));
參考 RFC 4648 §5 標準,將 +/= 替換為 -_ 並移除填充:
function urlsafe_b64encode(string $data): string {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
function urlsafe_b64decode(string $data): string {
$data = strtr($data, '-_', '+/');
return base64_decode($data . str_repeat('=', (4 - strlen($data) % 4) % 4));
}