2014-01-13 3 views
2

PHP의 헤더를 통해 올바른 charset 정보를 보내는 데 문제가 있습니다.iso-8859-2에 대한 올바른 charset 헤더 보내기

내 코드에서 ISO-8859-2로 인코딩 된 CSV 문자열을 만들었습니다.

이 결과 파일 ISO-8859-1로서 검출
$csv = 'iso-8859-2 encoded string, Łukasz Szukała'; 

header('Content-Type: text/csv; charset=ISO-8859-2'); 
header('Content-Disposition: attachment; filename=report.csv'); 

echo $csv; 

, 편집기 (I 메모장을 사용하고 ++)과 함께 열 때이 때문에 잘못 표시 : I (간체자) 다음 코드를 사용하여 브라우저 이것을 출력하고 . UTF-8 문자열을 변환

은 다음과 같이 예상 작품 :

$csv = 'iso-8859-2 encoded string, Łukasz Szukała'; 
$csv = iconv('ISO-8859-2', 'UTF-8', $csv); 

header('Content-Type: text/csv; charset=UTF-8'); 
header('Content-Disposition: attachment; filename=report.csv'); 

echo $csv; 

나는이 경우에도 완전히 캐릭터 세트의 일부를 생략 할 수 있습니다.

그러나 파일을 ISO-8859-2로 인코딩해야하며 헤더 정보가 ISO-8859-2로 감지되는 파일로 이어지지 않는 이유를 알 수 없습니다. 나는 또한 IANA (http://www.iana.org/assignments/character-sets/character-sets.xhtml)에 따라 다른 별칭을 시도했지만 어떤 브라우저에서도 작동하지 않습니다.

중요한 입력에 크게 감사드립니다.

답변

1

당신은 메모장 + +가 문자 집합을 감지 할 것을 기대하고 있다는 것을 제외하고는 모든 것을 정확하게하고 있습니다. 엄밀히 말하면 ISO-8859-2는 인코딩이 아니고 문자 집합입니다.

편집기로 열리는 파일은 헤더없이 브라우저에 보낸 일반 텍스트입니다. 따라서 편집기는 싱글 바이트 인코딩임을 감지 할 수 있지만 문자 세트 감지는 불가능하므로 디폴트 시스템 문자 세트로 열립니다.

탐지를

파일을 인코딩에 대한 my answer를 참조 여전히 올바른 인코딩이 있지만, 메모장 ++ 단지 잘못 표시. UTF-8 인코딩은 문자 집합이 없기 때문에 항상 올바르게 표시됩니다 (생각합니다).

+0

예, 파일을 로컬에 저장하면 모든 헤더 정보가 손실된다는 것을 알았습니다. –