>  기사  >  백엔드 개발  >  PHP가 UTF-8로 인코딩된 CSV 파일을 생성하고 Excel에서 열 때 문자가 깨지는 문제를 해결하는 방법

PHP가 UTF-8로 인코딩된 CSV 파일을 생성하고 Excel에서 열 때 문자가 깨지는 문제를 해결하는 방법

伊谢尔伦
伊谢尔伦원래의
2016-12-02 09:59:091260검색

원인: 출력 CSV 파일에 BOM이 없습니다.

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에서 BOM을 어떻게 출력하나요?

모든 내용을 출력하기 전

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

샘플 코드:

<?php
    function writeCsvToFile($file,array $data){
        $fp = fopen($file, &#39;w&#39;);
        //Windows下使用BOM来标记文本文件的编码方式
        fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF));
        foreach ($data as $line) {
            fputcsv($fp, $line);
        }
        fclose($fp);
    }


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