2012-03-15 18 views
5

Deseo emitir una imagen jpg en línea como una cadena codificada en base64, sin embargo cuando hago esto:file_get_contents muestra la salida inesperada al leer un archivo

$contents = file_get_contents($filename); 
print "<img src=\"data:image/jpg;base64,".$contents."\"/>"; 

Dónde $filename es un archivo de texto local la imagen base 64 con. La salida es la siguiente:

<img src="data:image/jpg;base64,/9j/4A..... (the rest of the file)...." /> 

Y Obviamente, tenemos la imagen no se hace, pero ¿de dónde vienen de ? No está en el archivo de texto. Si se elimina, la imagen se muestra correctamente.

+0

lo se obtiene en var_dump ($ contents); ? – Milap

Respuesta

9

Es un Unicode Byte-Order Mark. El archivo se guardó con un editor que agregó la lista de materiales para indicar que el archivo está codificado como UTF-8. Entonces esos bytes en realidad están en el archivo, pero un editor de texto simplemente no lo mostrará ya que no es texto. Para almacenar este tipo de datos, querrá eliminar la lista de materiales. La manera más fácil sería configurar su editor de no añadir la lista de materiales, pero si usted no tiene influencia sobre el proceso de creación del archivo que pudo a que en la marcha en el script también:

print "<img src=\"data:image/jpeg;base64,".ltrim($contents, "\xEF\xBB\xBF")."\"/>"; 
Cuestiones relacionadas