2012-01-11 19 views

Respuesta

41

echo por lo general da salida a un nuevo carácter de línea al final de la cadena, para suprimir que el uso del interruptor -n:

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

mismo modo para PHP:

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

Perfecto, gracias! – psynnott

+0

+1 por -n - es una nueva para mí –

+2

+1 por enseñarme algo nuevo sobre echo – Peter

9

Al hacer un eco que me da esto:

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

supongo que podría tener una línea- incluido terminando en el unix, ya que echo probablemente esté añadiendo un carácter de nueva línea, incluso si lo canalizas hacia la codificación base64.

+1

correcta explicación, gracias, pero voy a dar la solución a knittl, ya que dio la solución de "-n". – psynnott

+0

Claro, era uno nuevo para mí también :) – bardiir

11

consola abierta en el navegador, tipo atob('dGVzdAo='):

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

Tiene un carácter adicional en su entrada. Y eso es 0x0A (LF).

+4

+1 para ['atob'] (https://developer.mozilla.org/es/DOM/window. atob), eso era nuevo para mí. –

+0

Por cierto, esa función no forma parte de ningún estándar, así que no piense en usarla en producción –

+0

@ M28 ** offtopic **: está en el estándar: http://www.whatwg.org/specs/ web-apps/current-work/multipage/webappapis.html # atob y para IE puede usar la biblioteca simple con esas dos funciones (existen muchas implementaciones: [1] (http://closure-library.googlecode.com/svn) /docs/closure_goog_crypt_base64.js.source.html), [2] (http://code.google.com/p/stringencoders/source/browse/trunk/javascript/base64.js?r=230), [3] (https://bitbucket.org/davidchambers/base64.js/src), [4] (https://gist.github.com/1284012)). – c69

2

El linux base64 tiene una nueva línea al final.

+0

Sí, debido al eco sin -n, gracias – psynnott

2

Es porque la versión de Unix también codifica el final de la línea.

Para recibir efecto similar en PHP, tendrá que hacer algo así:

echo base64_encode('test'.PHP_EOL); 

cual seria:

dGVzdAo= 

Véase la prueba aquí: ideone.com/HorVD

EDIT: Como mencionó Charles, PHP_EOL es específico de la plataforma, por lo tanto, para verificar lo anterior en Windows, tendrá ve para reemplazarlo con un símbolo de fin de línea similar a Unix:

echo base64_encode("test\n"); 
+0

Cuidado,' PHP_EOL' es * específico de la plataforma * y será diferente en Windows. – Charles

+0

@Charles: Gracias, actualicé mi respuesta con su aviso. Pensé que sería más significativo, ya que codifica el final de línea de Linux con 'base64' de Linux, y usar el final de línea de la plataforma sería lo más apropiado. Me pregunto, sin embargo, si algo similar es posible en Windows (por ejemplo, usando PowerShell ?, tal vez con una sintaxis diferente, pero también dando como resultado que la cadena se procese con el fin de línea, pero esta vez con Windows). – Tadeck

+0

Parece que [base64ing se puede hacer] (http://blogs.msdn.com/b/powershell/archive/2006/04/25/583265.aspx) en cadenas en PowerShell. A juzgar por el hecho de que está trabajando en la cadena en lugar de en la salida de un comando específico, probablemente no haya * ninguna línea nueva colgante de la que preocuparse. – Charles

0

Lo mismo que en los chicos.

En Mac OS X, simplemente probar esto:

$ echo 'test' | cat -e 

test$ 

O

$ echo -n 'test' | cat -e 

test 

Y, sobre el comando de eco, puede ver la punta:

echo -e option in ubuntu doesn't work

+0

¿Cuál es la razón para tener que atravesar el gato? – psynnott

+0

@psynnott Solo para mostrar algunos detalles del comando 'eco'. – liuyu

Cuestiones relacionadas