cuáles son las diferencias entre PHP base64 encode y * nix base64
El base64_encode
de PHP devuelve una cadena diferente al comando linux base64
.
¿Por qué es esto?
PHP:
$ php
<?php
echo base64_encode('test');
?>
dGVzdA==
Linux base64:
$ echo 'test' | base64
dGVzdAo=
6 answers
echo
por lo general, muestra un nuevo carácter de línea al final de la cadena, para suprimirlo use el interruptor -n
:
$ echo -n 'test' | base64
dGVzdA==
Similar para PHP:
$ php
<?php
echo base64_encode("test\n");
?>
dGVzdAo=
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-11 09:56:37
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).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-11 09:57:02
Cuando hago un eco me da esto:
MacPro:~ bardiir$ echo 'test'
test
MacPro:~ bardiir$
Supongo que podría tener un final de línea incluido en unix, ya que echo probablemente está añadiendo un carácter de nueva línea, incluso si lo canaliza a la codificación base64.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-11 09:49:54
El linux base64
tiene una nueva línea al final.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-11 09:52:22
Es porque la versión Unix codifica también el final de línea.
Para recibir un efecto similar en PHP tendrás que hacer algo así:
echo base64_encode('test'.PHP_EOL);
Que producirá:
dGVzdAo=
Vea la prueba aquí: ideone.com/HorVD
EDIT: Como Charles mencionó, PHP_EOL
es específico de la plataforma, por lo que para verificar lo anterior en Windows tendrá que reemplazarlo con el símbolo de final de línea similar a Unix:
echo base64_encode("test\n");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-11 19:20:42
Lo mismo para los chicos de arriba.
En mac os X, solo prueba esto:
$ echo 'test' | cat -e
test$
O
$ echo -n 'test' | cat -e
test
Y, sobre el comando echo, puede ver el consejo:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:08:34