file_get_contents在读取文件时显示意外输出

时间:2012-03-15 13:39:01

标签: php image base64 file-get-contents

我想输出一个内联jpg图像作为base64编码的字符串,但是当我这样做时:

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

其中$filename是包含base64图像的本地文本文件。输出如下:

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

并且看似图像没有呈现,但来自何处?它不在文本文件中。如果删除,图像将正确显示。

1 个答案:

答案 0 :(得分:9)

这是一个Unicode Byte-Order Mark。该文件使用编辑器保存,该编辑器添加了BOM以指示文件编码为UTF-8。所以那些字节实际上在文件中,但是文本编辑器不会显示它,因为它不是文本。要存储此类数据,您需要删除BOM。最简单的方法是将编辑器配置为不添加BOM,但如果您没有对文件的创建过程产生影响,您也可以在脚本中即时使用它:

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