PHP的base64_encode
正在向linux base64
命令返回一个不同的字符串。
这是为什么?
PHP:
$ php
<?php
echo base64_encode('test');
?>
dGVzdA==
Linux base64:
$ echo 'test' | base64
dGVzdAo=
答案 0 :(得分:44)
echo
通常在字符串的末尾输出一个新行字符,以禁止使用-n
开关:
$ echo -n 'test' | base64
dGVzdA==
与PHP类似:
$ php
<?php
echo base64_encode("test\n");
?>
dGVzdAo=
答案 1 :(得分:12)
在浏览器中打开控制台,输入atob('dGVzdAo=')
:
http://gyazo.com/68d16f666c394887929408c519ac1b23.png
您的输入中有额外的字符。这是0x0A
(LF)。
答案 2 :(得分:9)
当做回声时,它给了我这个:
MacPro:~ bardiir$ echo 'test'
test
MacPro:~ bardiir$
我猜你可能在unix中有一个包含的行结尾,因为echo可能会附加一个换行符,即使你将它传递给base64编码。
答案 3 :(得分:2)
linux base64
最后有一个新行。
答案 4 :(得分:2)
这是因为Unix版本也编码了行尾。
要在PHP中获得类似的效果,您必须执行以下操作:
echo base64_encode('test'.PHP_EOL);
将输出:
dGVzdAo=
请参阅此处的证据:ideone.com/HorVD
编辑:正如Charles所说,PHP_EOL
是特定于平台的,所以要在Windows上检查上面的内容,你必须用类似Unix的行尾符号替换它:
echo base64_encode("test\n");
答案 5 :(得分:0)
与上述人员相同。
在mac os X中,只需测试一下:
$ echo 'test' | cat -e
test$
或者,
$ echo -n 'test' | cat -e
test
关于echo命令,可以看到提示: