Base64解码图像PHP

时间:2014-04-28 17:34:35

标签: php encoding base64 decode encode

我正在尝试在PHP中解码来自SQL数据库的图像blob(在base64_encode之后存储它)。

我正在使用

header('Pragma: public');
header('Cache-control: max-age=0');
header('Content-Type: image');
header("Content-Encoding: gzip");
header("Vary: Accept-Encoding");
echo gzencode( base64_decode ($result[0]['Icon']) ); // result is the result of query from DB

虽然我的浏览器语言是英语时有效,但如果我的浏览器语言不是英语,则无法正确解码。

我正在使用charles代理调试以查看响应。我无法在此发布回复。英语的响应大小比其他响应少3个字节。

但是对于其他语言来说,这就是额外的3个字节。

T�e�s�t�i�n�g� � 

我检查了数据库中图像的编码字符串。在DB中它是相同的但在发送响应时是不同的。因此,如果语言是英语,则图像正确显示,但如果语言不是英语,则图像会被破坏。请帮帮我。

2 个答案:

答案 0 :(得分:4)

我自己解决了这个问题。原因是因为PHP在开头添加了一个UTF-8字节顺序标记(BOM)。因此,当使用ob_clean()清除输出缓冲区时,此问题会得到解决; 以下工作完美。

header('Pragma: public');
header('Cache-control: max-age=0');
header('Content-Type: image');
header("Content-Encoding: gzip");
header("Vary: Accept-Encoding");
ob_clean();
echo gzencode( base64_decode ($result[0]['Icon']) ); // result is the result of query from DB

答案 1 :(得分:0)

您知道图片的名称或至少是扩展名吗?您必须在标题Content-Type中使用它。例如标题('内容类型:image / jpeg');