无论如何确保base64编码的字符串永远不包含非字母数字字符?
例如,如果我有一个我编码的长字符串,是否有一些我可以添加或附加到它的字符串,以确保用base64编码时只包含编码字符串中的字母和数字?像这样:
字符串:192.168.1.1
编码:MTkyLjE2OC4xLjE=
< - 我想摆脱'等号。
我尝试在字符串的末尾附加}
(新字符串现在是192.168.1.1}
),这有效(新的编码字符串:MTkyLjE2OC4xLjF9
),但有一种方法确保每种组合都有效吗?
这可能吗?
答案 0 :(得分:1)
这是长度。 =符号是填充,使输出为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个字符的倍数...
答案 1 :(得分:1)
你可以rtrim()等于标志,这是大多数人所做的。
但至于你的问题:当string / 3的长度是一个整数时。所以:
$pad = strlen($str) % 3; if($pad) { $str .= str_repeat(' ', $pad); }
但是,是的,解析器会自动将等号重新添加到4的倍数,当你将字符串传回时 - 所以你不需要保留它们。