php - que - ¿Puede una cadena codificada en base64 contener espacios en blanco?
decodificar imagen base64 javascript (5)
¿Podría una cadena codificada en base64 contener espacios en blanco? Específicamente, ¿podría contener espacios en blanco al final de la cadena?
PD. Estoy pensando en todo "MySQL recortará los espacios en blanco al almacenar cadenas en campos VARCHAR" aquí ;-)
Por lo que sé, no puede. Básicamente, una cadena Base64 debe construirse a partir de un conjunto de 64 caracteres. AZ, az, 0-9 hacen 62 - los otros dos dependen de la implementación.
Basado en lo que sé, ahora hay una implementación que usará el espacio en blanco como un personaje. La razón principal para esto es la legibilidad, es decir, una cadena Base64 debe ser impresa y reconocida fácilmente.
Probablemente encontrarás más información al respecto en Wikipedia .
Sí. La cadena codificada en Base64 puede contener espacios en blanco, pero los caracteres no son significativos. Así que está bien si la base de datos recorta espacios.
Como cuestión de hecho, la especificación MIME original recomienda romper cadenas de Base64 en líneas de 72 caracteres. base64Binary de XML también puede incluir líneas nuevas, pestañas, espacios.
En PHP, base64_decode()
elimina todos los caracteres de espacio en blanco para que no tenga que preocuparse por ello.
Wikipedia sugiere que hay como un montón de variaciones de la codificación Base64:
http://en.wikipedia.org/wiki/Base64
Entonces la respuesta probablemente dependa de lo que necesite hacer con la cadena. Pero me atrevería a decir que creó en PHP con base64_encode () por lo que parece seguro anexar espacios en blanco:
<?php
$original_data = ''Lorem ipsum dolor sit amet'';
$encoded_data = base64_encode($original_data);
$padded_data = '' '' . chunk_split($encoded_data, 3, '' '') . '' '';
echo base64_decode($padded_data); // Prints ''Lorem ipsum dolor sit amet''
?>
No, no puede. Consulte Base64 para el repositorio de caracteres permitido utilizado por base64
, que son los caracteres AZ
, az
, 0-9
, +
y /
(los dos últimos pueden diferir según la implementación), así como el carácter de relleno =
(pero también depende de la implementación) como algunas implementaciones no usan relleno en absoluto).
No debería, pero podría ser.
Una cadena base64 válida no debe contener espacios en blanco, ya que el alfabeto de codificación solo debe consistir en AZ az 0-9 + /
Sin embargo, si los datos codificados contienen un carácter ''+'' y los datos se pasan en una URL, pueden convertirse involuntariamente en un espacio. Por lo tanto, puede encontrarse con una cadena de base64 supuesta que parece tener espacios en ella en estas circunstancias.
Si este es el caso, simplemente reemplace espacios con más antes de decodificar.
PD. Estoy pensando en todo "MySQL reducirá los espacios en blanco al almacenar cadenas en campos VARCHAR" aquí
Como un aparte, los espacios en blanco finales de un varchar no serán eliminados casualmente a partir de MySQL 5.0.3