首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确保base64编码的字符串不包含非字母数字字符

确保base64编码的字符串不包含非字母数字字符
EN

Stack Overflow用户
提问于 2012-05-20 20:23:35
回答 2查看 2.8K关注 0票数 0

有没有办法确保base64编码的字符串永远不会包含非字母数字字符?

例如,如果我有一个编码的长字符串,有没有什么东西可以预先添加或附加到它上面,以确保在用base64编码时,在编码的字符串中只包含字母和数字?如下所示:

字符串:192.168.1.1

编码:MTkyLjE2OC4xLjE= <-我想‘摆脱’等号。

我尝试在字符串的末尾附加} (新的字符串现在是192.168.1.1}),这起作用了(新的编码字符串:MTkyLjE2OC4xLjF9),但是有没有一种方法可以确保每个组合都有效?

这个是可能的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-20 20:31:50

你可以去掉等号rtrim(),这是大多数人都会做的事情。

但是对于你的问题:当字符串的长度/3是一个整数时。所以:

代码语言:javascript
复制
$pad = strlen($str) % 3; if($pad) { $str .= str_repeat(' ', $pad); }

但是,是的,解析器会自动添加等号,就像这样,当你传入字符串时,等号的倍数是4的倍数-所以你不需要保留它们。

票数 1
EN

Stack Overflow用户

发布于 2012-05-20 20:26:32

这是关于长度的。=符号用于填充,以使输出成为4个base64字符的倍数。3个字符转换为4个base64字符,因此您只需要以某种方式使您的输入字符串长度是3个字符的倍数。在您的案例中:

代码语言:javascript
复制
192.168.1.1 - 11 characters long, base64 ends with =
192.168.1.1$ - 12 characters long, base64 doesn't end with =

选择您可以轻松删除的填充字符。

另一种选择是从输出中去掉=,然后确保在尝试base64解码之前附加=符号,使其成为4个字符的倍数……

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10673364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档