【发布时间】:2012-01-11 09:46:45
【问题描述】:
PHP 的 base64_encode 正在向 linux base64 命令返回一个不同的字符串。
这是为什么呢?
PHP:
$ php
<?php
echo base64_encode('test');
?>
dGVzdA==
Linux base64:
$ echo 'test' | base64
dGVzdAo=
【问题讨论】:
PHP 的 base64_encode 正在向 linux base64 命令返回一个不同的字符串。
这是为什么呢?
PHP:
$ php
<?php
echo base64_encode('test');
?>
dGVzdA==
Linux base64:
$ echo 'test' | base64
dGVzdAo=
【问题讨论】:
echo 通常在字符串的末尾输出一个换行符,以抑制使用-n 开关:
$ echo -n 'test' | base64
dGVzdA==
PHP 也是如此:
$ php
<?php
echo base64_encode("test\n");
?>
dGVzdAo=
【讨论】:
【讨论】:
atob,这对我来说是新的。
Not part of any standard(参见 Ilmari 的链接)
当做回声时,它给了我这个:
MacPro:~ bardiir$ echo 'test'
test
MacPro:~ bardiir$
我猜你可能在 unix 中包含一个行尾,因为 echo 可能会附加一个换行符,即使你将它通过管道传输到 base64 编码。
【讨论】:
linux base64末尾有一个新行。
【讨论】:
这是因为 Unix 版本也对行尾进行编码。
要在 PHP 中获得类似的效果,您必须执行以下操作:
echo base64_encode('test'.PHP_EOL);
将输出:
dGVzdAo=
在此处查看证明:ideone.com/HorVD
编辑: 正如查尔斯所说,PHP_EOL 是特定于平台的,因此要在 Windows 上检查上述内容,您必须将其替换为类似 Unix 的行尾符号:
echo base64_encode("test\n");
【讨论】:
PHP_EOL 是特定于平台的,在 Windows 上会有所不同。
base64 对 Linux 的行尾进行编码,并且使用平台的行尾是最合适的。然而,我想知道,在 Windows 上是否有类似的可能(例如,使用 PowerShell?,可能使用不同的语法,但也会导致字符串以行尾处理,但这次是 Windows 的)。
和上面的人一样。
在 mac os X 中,只需测试一下:
$ echo 'test' | cat -e
test$
或者,
$ echo -n 'test' | cat -e
test
还有,关于echo命令,可以看提示:
【讨论】: