PHP base64_encode和* nix base64之间有什么区别

时间:2012-01-11 09:46:46

标签: php encoding base64

PHP的base64_encode正在向linux base64命令返回一个不同的字符串。 这是为什么?

PHP:

$ php
<?php
echo base64_encode('test');
?>
dGVzdA==

Linux base64:

$ echo 'test' | base64
dGVzdAo=

6 个答案:

答案 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命令,可以看到提示:

echo -e option in ubuntu doesn't work