>  기사  >  백엔드 개발  >  PHP에서 잘못된 CSV 출력 문제를 해결하는 방법

PHP에서 잘못된 CSV 출력 문제를 해결하는 방법

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼원래의
2019-09-27 09:14:222667검색

PHP에서 잘못된 CSV 출력 문제를 해결하는 방법

프로젝트 작업 시 외국어 사용을 접하게 되면 UTF-8 인코딩을 사용하게 됩니다. 그러나 PHP를 사용하여 CSV 파일을 내보낼 때 작성된 데이터가 UTF-8 인코딩을 사용하여 일본어, 한국어 등 외국어로 되어 있는 경우 잘못된 문자가 나타납니다.

PHP에서 생성된 CSV 파일의 왜곡된 문제를 해결하려면 파일 시작 부분에 BOM 헤더를 출력하고 Windows에 CSV 파일의 인코딩 방법을 알려주기만 하면 됩니다. 그러면 Excel에서 파일을 열 때 올바른 인코딩을 사용할 수 있습니다. CSV.

관련 권장 사항: "php tutorial"

BOM이란 무엇입니까

UCS 인코딩에는 "ZERO WIDTH NO-break SPACE"라는 문자가 있고 해당 인코딩은 FEFF입니다. FFFE는 UCS에 존재하지 않는 문자이므로 실제 전송에서는 나타나지 않아야 한다. UCS 사양에서는 바이트 스트림을 전송하기 전에 "ZERO WIDTH NO-break SPACE" 문자를 전송할 것을 권장합니다. 이런 식으로 수신기가 FEFF를 수신하면 바이트 스트림이 Big-Endian임을 나타내고, FFFE를 수신하면 바이트 스트림이 Little-Endian임을 나타냅니다.

그래서 "ZERO WIDTH NO-break SPACE" 문자를 BOM이라고도 합니다. UTF-8에서는 바이트 순서를 나타내기 위해 BOM이 필요하지 않지만 BOM을 사용하여 인코딩 방법을 나타낼 수 있습니다. "ZERO WIDTH NO-break SPACE" 문자의 UTF-8 인코딩은 EF BB BF입니다. 따라서 수신기가 EF BB BF로 시작하는 바이트 스트림을 수신하면 해당 스트림이 UTF-8로 인코딩되었음을 알 수 있습니다. Windows는 BOM을 사용하여 텍스트 파일의 인코딩을 표시합니다.

모든 것이 출력되기 전

print(chr(0xEF).chr(0xBB).chr(0xBF));

몇 가지 UTF 인코딩 BOM 헤더

define ('UTF32_BIG_ENDIAN_BOM'   ,   chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));
define ('UTF32_LITTLE_ENDIAN_BOM',   chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));
define ('UTF16_BIG_ENDIAN_BOM' ,   chr(0xFE) . chr(0xFF));
define ('UTF16_LITTLE_ENDIAN_BOM',   chr(0xFF) . chr(0xFE));
define ('UTF8_BOM'   ,   chr(0xEF) . chr(0xBB) . chr(0xBF));

전체 코드:

header('Expires: 0');
header('Cache-control: private');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Description: File Transfer');
header('Content-Encoding: UTF-8');
header('Content-type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment;filename=Customers_Export.csv');
echo "\xEF\xBB\xBF"; // UTF-8 BOM
// print(chr(0xEF).chr(0xBB).chr(0xBF));

위 내용은 PHP에서 잘못된 CSV 출력 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.