2014-04-28 4 views
2

PHP에서 SQL 데이터베이스 (base64_encode 이후에 저장 됨)에서 이미지 blob을 디코딩하려고합니다.Base64 디코드 이미지 PHP

브라우저의 언어가 영어 인 경우는 약간의 시간을 작동하지만 나는

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 

를 사용하고 있지만, 브라우저의 언어가 영어가 아닌 경우 제대로 디코딩하지 않습니다.

저는 응답을보기 위해 찰스 프록시로 디버깅 중입니다. 나는 여기에 답변을 게시 할 수 없습니다. 영어 응답의 크기는 다른 응답보다 3 바이트 적습니다.

그러나 다른 언어의 경우 추가 3 바이트로 이와 같이 나타납니다.

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

이미지의 인코딩 된 문자열에 대해 DB를 검사했습니다. 그것은 DB에서 동일하지만 응답이 전송 될 때와 다릅니다. 따라서 언어가 영어 인 경우 이미지가 올바르게 표시되지만 언어가 영어가 아닌 경우 이미지가 깨집니다. 도와주세요.

+0

왜 gzencode()를 사용하고 있습니까? 그 여분의 단계를 생략하고 단순히 base64_decode (...)를 반향하면 어떻게됩니까? – Peter

+0

gzencode를 제거합니다. gzencode를 제거하면 원시 이미지 데이터가 출력되지만 예상 한 결과는 아닙니다. 이미지, 콘텐츠 유형을 설정해야합니다. 올바른 헤더 –

+0

@ 피터 gzencode를 제거하더라도 훨씬 더 큰 크기의 응답을 제외하고는 응답이 비슷합니다. – Theguy

답변

3

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 
+0

내 시간을 절약 한 위인 – Thamaraiselvam

0

이미지의 이름 또는 확장자를 알고 계십니까? 헤더 Content-Type에서 사용해야합니다. 예를 들어 header ('Content-type : image/jpeg');

+0

이미지의 이름은 요청에 따라 다릅니다. 하지만 콘텐츠 유형은 png입니다. – Theguy

+0

이렇게 사용하십시오 : header ('Content-Type : image/png'); echo base64_decode ($ result [0] [ 'Icon']); – lulco

관련 문제