PHP에서 내보낸 잘못된 CSV에 대한 해결 방법은 파일 시작 부분에 BOM 헤더를 출력하여 Windows에 CSV 파일의 인코딩 방법을 알려주어 Excel에서 CSV를 열 때 올바른 인코딩을 사용할 수 있도록 하는 것입니다.
PHP에서 CSV 파일을 내보낼 때 문자 깨짐 해결 방법
프로젝트를 진행하면서 외국어 사용을 접하게 되면 UTF-8 인코딩을 사용하게 됩니다. 그러나 PHP를 사용하여 CSV 파일을 내보낼 때 작성된 데이터가 UTF-8 인코딩을 사용하여 일본어, 한국어 등 외국어로 되어 있는 경우 잘못된 문자가 나타납니다.
PHP에서 생성된 CSV 파일의 왜곡된 문제를 해결하려면 파일 시작 부분에 BOM 헤더를 출력하여 Windows에 CSV 파일의 인코딩 방법을 알려주기만 하면 됩니다. 그러면 Excel에서 CSV 파일을 열 때 올바른 인코딩을 사용할 수 있습니다. CSV.
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 중국어 웹사이트를 방문하세요!
위 내용은 PHP가 잘못된 문자가 포함된 CSV를 내보내는 경우 수행할 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!