有没有办法确保base64编码的字符串永远不会包含非字母数字字符?
例如,如果我有一个编码的长字符串,有没有什么东西可以预先添加或附加到它上面,以确保在用base64编码时,在编码的字符串中只包含字母和数字?如下所示:
字符串:192.168.1.1
编码:MTkyLjE2OC4xLjE= <-我想‘摆脱’等号。
我尝试在字符串的末尾附加} (新的字符串现在是192.168.1.1}),这起作用了(新的编码字符串:MTkyLjE2OC4xLjF9),但是有没有一种方法可以确保每个组合都有效?
这个是可能的吗?
发布于 2012-05-20 20:31:50
你可以去掉等号rtrim(),这是大多数人都会做的事情。
但是对于你的问题:当字符串的长度/3是一个整数时。所以:
$pad = strlen($str) % 3; if($pad) { $str .= str_repeat(' ', $pad); }但是,是的,解析器会自动添加等号,就像这样,当你传入字符串时,等号的倍数是4的倍数-所以你不需要保留它们。
发布于 2012-05-20 20:26:32
这是关于长度的。=符号用于填充,以使输出成为4个base64字符的倍数。3个字符转换为4个base64字符,因此您只需要以某种方式使您的输入字符串长度是3个字符的倍数。在您的案例中:
192.168.1.1 - 11 characters long, base64 ends with =
192.168.1.1$ - 12 characters long, base64 doesn't end with =选择您可以轻松删除的填充字符。
另一种选择是从输出中去掉=,然后确保在尝试base64解码之前附加=符号,使其成为4个字符的倍数……
https://stackoverflow.com/questions/10673364
复制相似问题