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=