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('dGVzdAo=')
:
(источник: gyazo.com)
У вас есть дополнительный символ в вашем входе. И это 0x0A
(LF).
При выполнении эха это дает мне следующее:
MacPro:~ bardiir$ echo 'test'
test
MacPro:~ bardiir$
Я бы предположил, что у вас может быть включен конец строки в unix, так как эхо, вероятно, добавляет символ новой строки, даже если вы подключаете его к кодировке base64.
У linux base64
есть новая строка в конце.
Это потому, что версия Unix также кодирует конец строки.
Чтобы получить аналогичный эффект в PHP, вам нужно будет сделать что-то вроде этого:
echo base64_encode('test'.PHP_EOL);
который выведет:
dGVzdAo=
См. доказательство здесь: ideone.com/HorVD
РЕДАКТИРОВАТЬ: Как отметил Чарльз, PHP_EOL
является специфичным для платформы, поэтому, чтобы проверить вышеописанное на Windows, вам придется заменить его символом конца строки Unix:
echo base64_encode("test\n");
То же самое с вышеперечисленными парнями.
В mac os X просто проверьте это:
$ echo 'test' | cat -e
test$
Или
$ echo -n 'test' | cat -e
test
И о команде эхо можно увидеть подсказку: