>  기사  >  백엔드 개발  >  PHP가 CSV로 잘못된 문자를 출력하는 경우 수행할 작업

PHP가 CSV로 잘못된 문자를 출력하는 경우 수행할 작업

藏色散人
藏色散人원래의
2021-03-01 17:59:432206검색

PHP에 의한 왜곡된 CSV 출력에 대한 해결 방법: 먼저 해당 코드 파일을 연 다음 파일 시작 부분에 BOM 헤더를 출력하고 Windows에 CSV 파일의 인코딩 방법을 알려줍니다. 열 때 Excel에서 올바른 인코딩을 사용하도록 합니다. CSV.

PHP가 CSV로 잘못된 문자를 출력하는 경우 수행할 작업

이 문서의 운영 환경: Windows 7 시스템, PHP 버전 7.1, Dell G3 컴퓨터.

PHP에서 CSV 파일을 내보낼 때 문자가 깨지는 문제 해결

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

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

【추천 학습: "PHP Video Tutorial"】

  모든 콘텐츠가 출력되기 전

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으로 문의하세요.