+ 被解析為空格/ 為路徑分隔符= 為參數分隔符替換規則:+ → -、/ → _、移除填充 =
function urlsafe_b64encode(string $string): string {
$data = base64_encode($string);
$data = str_replace(['+', '/', '='], ['-', '_', ''], $data);
return $data;
}
function urlsafe_b64decode(string $string): string {
$data = str_replace(['-', '_'], ['+', '/'], $string);
// 補回填充
$mod4 = strlen($data) % 4;
if ($mod4) {
$data .= substr('====', $mod4);
}
return base64_decode($data);
}
$original = '測試字串+含特殊/字元='; $encoded = urlsafe_b64encode($original); $decoded = urlsafe_b64decode($encoded); var_dump($original === $decoded); // bool(true) echo "URL 安全: $encoded\n"; // 無 + / = 字元