В чем разница между PHP base64_encode и * nix base64 - PullRequest
25 голосов
/ 11 января 2012

PHP base64_encode возвращает другую строку в команду linux base64.Почему это так?

PHP:

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

Linux base64:

$ echo 'test' | base64
dGVzdAo=

Ответы [ 6 ]

44 голосов
/ 11 января 2012

echo обычно выводит символ новой строки в конце строки, чтобы исключить использование ключа -n:

$ echo -n 'test' | base64
dGVzdA==

Аналогично для PHP:

$ php
<?php
echo base64_encode("test\n");
?>
dGVzdAo=
12 голосов
/ 11 января 2012

откройте консоль в вашем браузере, введите atob('dGVzdAo='):

http://gyazo.com/68d16f666c394887929408c519ac1b23.png

У вас есть дополнительный символ на вашем входе. И это 0x0A (LF).

9 голосов
/ 11 января 2012

При выполнении эха это дает мне следующее:

MacPro:~ bardiir$ echo 'test'
test
MacPro:~ bardiir$ 

Я предполагаю, что у вас может быть включенный конец строки в Unix, так как эхо, вероятно, добавляет символ новой строки, даже если вы передаете его по конвейеручерез кодировку base64.

2 голосов
/ 11 января 2012

Это потому, что версия Unix кодирует также конец строки.

Чтобы получить подобный эффект в PHP, вам нужно сделать что-то вроде этого:

echo base64_encode('test'.PHP_EOL);

, который выдаст:

dGVzdAo=

См. Доказательство здесь: ideone.com / HorVD

РЕДАКТИРОВАТЬ: Как упоминал Чарльз, PHP_EOL зависит от платформы, поэтому для проверки вышеуказанного в Windows вам придется заменить его символом конца строки в стиле Unix:

echo base64_encode("test\n");
2 голосов
/ 11 января 2012

У linux base64 новая строка в конце.

0 голосов
/ 04 мая 2013

То же, что и выше, ребята.

В Mac OS X просто протестируйте это:

$ echo  'test' | cat -e

test$

Или,

$ echo -n  'test' | cat -e

test

А по поводу команды echo можно посмотреть подсказку:

опция echo -e в Ubuntu не работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...