Подтвердить что ты не робот

Каковы различия между PHP base64_encode и * nix base64

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

PHP:

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

Linux base64:

$ echo 'test' | base64
dGVzdAo=
4b9b3361

Ответ 1

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

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

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

$ php
<?php
echo base64_encode("test\n");
?>
dGVzdAo=

Ответ 2

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


(источник: gyazo.com)

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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

echo base64_encode('test'.PHP_EOL);

который выведет:

dGVzdAo=

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

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

echo base64_encode("test\n");

Ответ 6

То же самое с вышеперечисленными парнями.

В mac os X просто проверьте это:

$ echo  'test' | cat -e

test$

Или

$ echo -n  'test' | cat -e

test

И о команде эхо можно увидеть подсказку:

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