php中的base64_encode()限制

时间:2014-05-03 18:10:22

标签: php encoding

我使用base64_encode将数字id发送到url,base64_encode($list_post['id']);最多99个工作正常,但99之后产生错误的编码字符串。

编码字符串中的最后一个字符是=(等号),但是当数字超过99时,例如100,它不会在结尾处显示=(等号)。

2 个答案:

答案 0 :(得分:2)

看看base64中的填充是如何工作的:http://en.wikipedia.org/wiki/Base64#Padding

并不总是需要填充(" ="字符),在某些实现中甚至不是强制性的。

编辑:确定您的评论我发现您在这样的网址中使用了base64编码的字符串:

http://example.com/path/OTC=

base64编码包含在URL中具有特殊含义的字符,因此您需要使用稍微修改过的函数(https://stackoverflow.com/a/5835352/2737514):

function base64_url_encode($input) {
    return strtr(base64_encode($input), '+/=', '-_,');
}

function base64_url_decode($input) {
    return base64_decode(strtr($input, '-_,', '+/='));
}

但是,由于您的代码适用于某些数字,因此.htaccess可能无法正确解析URL,或者解释URL的PHP​​代码存在问题。在没有看到其他代码的情况下,我无法提供更多帮助。

答案 1 :(得分:1)

它似乎对我来说很好

请您使用以下代码进行测试

echo base64_encode(101);
echo base64_decode(base64_encode(101));

<强> DEMO

  

Base64编码数据占用的空间比原始数据多33%。

所以这些数字不应该是个问题