프로젝트 작업 시 외국어 사용을 접하게 되면 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!