Base64解码图像PHP
我试图在PHP中解码SQL数据库中的一个图像块(它存储在base64_编码后) 我正在使用Base64解码图像PHP,php,encoding,base64,decode,encode,Php,Encoding,Base64,Decode,Encode,我试图在PHP中解码SQL数据库中的一个图像块(它存储在base64_编码后) 我正在使用 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]['Ic
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 proxy以查看响应。我无法在这里发布回复。英语响应的大小比其他响应小3字节
但对于其他语言,它是这样的,有额外的3个字节
T�e�s�t�i�n�g� �
我检查了数据库中的图像编码字符串。在DB中相同,但在发送响应时不同。因此,如果语言为英语,图像将正确显示,但如果语言不是英语,图像将被破坏。请帮助我。您知道图像的名称或至少分机名吗?您必须在标题内容类型中使用它。例如标题('Content-type:image/jpeg') 您知道图像的名称或至少分机名吗?您必须在标题内容类型中使用它。例如标题('Content-type:image/jpeg') 我自己解决了这个问题。原因是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
我自己解决了这个问题,原因是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
为什么要使用gzencode()?如果你放弃这个额外的步骤,简单地回显base64_解码(…),会发生什么?移除gzencode,尽管它将输出原始图像数据,这很可能不是你所期望的;对于图像,您需要正确设置内容类型headers@Peter即使我删除了gzencode,响应也是相似的,除了更大的响应。@LozCherone我已经正确设置了所有的头。我已经包括了我设置的标题。那么
内容类型:image
对于start来说是错误的为什么使用gzencode()?如果你放弃这个额外的步骤,简单地回显base64_解码(…),会发生什么?移除gzencode,尽管它将输出原始图像数据,这很可能不是你所期望的;对于图像,您需要正确设置内容类型headers@Peter即使我删除了gzencode,响应也是相似的,除了更大的响应。@LozCherone我已经正确设置了所有的头。我已经包括了我设置的标题。嗯内容类型:image
对于一个start来说是错误的图像名称根据请求而变化。但是内容类型是png,所以使用这个:header('content-type:image/png');echo base64_解码($result[0]['Icon']);图像的名称根据请求而变化。但是内容类型是png,所以使用这个:header('content-type:image/png');echo base64_解码($result[0]['Icon']);