PHP base64_encode在字符串末尾添加奇怪的字符

时间:2018-03-16 12:10:50

标签: php cookies base64

我使用的是一个数组,我将其编码为json,而不是BASE64,将其保存在Cookie中,以便稍后检索。 实际的字符串是:

{"insert":0,"delete":0}

在PHP中我有:

$Sync = json_encode($update);
setcookie('Sync',strtr(base64_encode($Sync), '+/', '-_'), 0, "/");

Cookie存储为:

eyJpbnNlcnQiOjEsImRlbGV0ZSI6MH0%3D

最后的“%3D”应该是“=”所以要填充base64的其余部分,因此返回奇怪的字符,但我无法正确。有任何想法吗? 提前致谢

1 个答案:

答案 0 :(得分:0)

在php.net(http://php.net/manual/en/function.base64-encode.php#103849)上的文档中,顶部注释提供了两个应该对您有帮助的函数(类似于您的实现:))

  

任何对“base64url”#39;变体编码,你可以使用这对函数:

<?php 
function base64url_encode($data) { 
  return rtrim(strtr(base64_encode($data), '+/', '-_'), '='); 
} 

function base64url_decode($data) { 
  return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT)); 
} 
?>

在您的实现中,看起来您需要换行 strtr(base64_encode($Sync), '+/', '-_'), 0, "/")rtrim,如下:

rtrim(strtr(base64_encode($Sync), '+/', '-_'), 0, "/"), '=')

结果:https://3v4l.org/5D1Mk