Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Base64解码图像PHP_Php_Encoding_Base64_Decode_Encode - Fatal编程技术网

Base64解码图像PHP

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

我试图在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]['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']);