online - ¿Cuáles son las diferencias entre PHP base64_encode y*nix base64?
php $file to base64 (6)
Al hacer un eco me da esto:
MacPro:~ bardiir$ echo ''test''
test
MacPro:~ bardiir$
Supongo que es posible que tenga un final de línea incluido en el Unix, ya que el eco probablemente está agregando un carácter de nueva línea, incluso si se canaliza a través de la codificación base64.
El base64_encode base64 PHP está devolviendo una cadena diferente al comando base64 linux. ¿Por qué es esto?
PHP:
$ php
<?php
echo base64_encode(''test'');
?>
dGVzdA==
Linux base64:
$ echo ''test'' | base64
dGVzdAo=
El linux base64 tiene una nueva línea al final.
Es porque la versión Unix codifica también el final de la línea.
Para recibir un efecto similar en PHP, tendrás que hacer algo como eso:
echo base64_encode(''test''.PHP_EOL);
que dará salida:
dGVzdAo=
Vea la prueba aquí: ideone.com/HorVD
EDITAR: Como mencionó Charles, PHP_EOL es específico de la plataforma, así que para verificar lo anterior en Windows tendrá que reemplazarlo con el símbolo de fin de línea similar a Unix:
echo base64_encode("test/n");
Lo mismo a los anteriores.
En Mac OS X, solo prueba esto:
$ echo ''test'' | cat -e
test$
O,
$ echo -n ''test'' | cat -e
test
Y, sobre el comando echo, podemos ver el tip:
abra la consola en su navegador, escriba atob(''dGVzdAo='') :
http://gyazo.com/68d16f666c394887929408c519ac1b23.png
Tienes carácter extra en tu entrada. Y eso es 0x0A (LF).
echo generalmente genera un nuevo carácter de línea al final de la cadena, para suprimir el uso del -n :
$ echo -n ''test'' | base64
dGVzdA==
Del mismo modo para PHP:
$ php
<?php
echo base64_encode("test/n");
?>
dGVzdAo=