標準 base64_encode 產生的 +、/、= 在 URL 中會導致解析錯誤,需轉換為 URL 安全字符集。
function urlsafe_b64encode($string) {
$data = base64_encode($string);
$data = str_replace(['+', '/', '='], ['-', '_', ''], $data);
return $data;
}
function urlsafe_b64decode($string) {
$data = str_replace(['-', '_'], ['+', '/'], $string);
$mod4 = strlen($data) % 4;
if ($mod4) {
$data .= substr('====', $mod4); // 補齊 padding
}
return base64_decode($data);
}
| 步驟 | 編碼 | 解碼 |
|---|---|---|
| 1 | 標準 Base64 編碼 | 還原安全字符到標準字符 |
| 2 | + → -、/ → _、= → 移除 | 計算長度模 4,補齊 = |
| 3 | 返回安全字串 | 標準 Base64 解碼 |
$original = 'user_id=123&action=pay&amount=99.9'; $encoded = urlsafe_b64encode($original); $decoded = urlsafe_b64decode($encoded); echo "原文: $original\n"; echo "編碼: $encoded\n"; echo "解碼: $decoded\n"; echo "驗證: " . ($original === $decoded ? '通過' : '失敗') . "\n";