>  기사  >  백엔드 개발  >  utf8로 인코딩된 PHP에서 내보낸 잘못된 CSV를 해결하는 방법은 무엇입니까?

utf8로 인코딩된 PHP에서 내보낸 잘못된 CSV를 해결하는 방법은 무엇입니까?

青灯夜游
青灯夜游원래의
2020-08-17 10:43:034447검색

깨진 문자를 해결하는 방법: 1. iconv 함수를 사용하여 utf8을 GBK로 변환합니다. 구문 "$str = iconv('utf-8', 'GBK//IGNORE', $str));"; 내용을 출력하기 전에 BOM 헤더를 삭제하면 Excel에서 UTF-8임을 자동으로 인식할 수 있습니다.

utf8로 인코딩된 PHP에서 내보낸 잘못된 CSV를 해결하는 방법은 무엇입니까?

추천: "PHP Video Tutorial"

사실 요구 사항은 데이터를 Excel로 내보내는 것이며 물론 유명한 PHPExcel 라이브러리가 떠오릅니다. 이 라이브러리는 매우 강력하지만 메모리를 많이 차지하며 100,000개가 넘는 데이터로 인해 기본적으로 웹 요청을 완료하기가 어렵습니다. 따라서 경량 csv를 내보내려면 기본 PHP를 사용해야 합니다.

일반적인 상황에서 UTF-8로 인코딩된 일반 콘텐츠를 csv로 내보낼 때 Excel로 열면 일부 비주류 문자나 이모티콘 표현은 말할 것도 없고 문자가 깨질 수 있습니다. 코드가 왜곡되는 이유는 Windows 시스템에서 기본 Excel이 GBK 인코딩을 사용하여 구문 분석되기 때문입니다. 요즘에는 여전히 UTF-8을 사용하는 인코딩이 있습니다. 그렇다면 대기업의 잘 알려진 제품에서는 약간의 트래픽을 절약하기 위해 GBK 및 기타 인코딩 버전을 생산할 것입니다.

문자 깨짐 문제를 해결하기 위해 일반적으로 PHP의 방법은 iconv 함수를 사용하여 GBK로 트랜스코딩하는 것입니다. 이렇게 하면 기본적으로 Excel을 열 때 문제가 없습니다. 하지만 이모티콘 표현과 같은 주류 문자의 경우 GBK에서는 이를 표시할 수 없습니다. 트랜스코딩에 실패하면 문자가 비어 있게 됩니다. //IGNORE 태그를 추가하여 무시할 수 있습니다. 그러면 해당 문자는 무시되고 다른 일반 문자는 유지될 수 있습니다.

$str = iconv('utf-8', 'GBK//IGNORE', $str));

이것은 타협이라고 할 수 있습니다. 트랜스코딩 없이 UTF-8을 직접 출력할 수 있나요? Excel에서는 UTF-8을 자동으로 인식하고 UTF-8을 사용하여 디코딩하고 표시하지 않습니까? 실제로 가능하지만 BOM 헤더가 필요합니다(Windows가 아닌 세계에는 그러한 것이 없습니다). 이 BOM 헤더를 사용하면 UTF-8임을 인식할 수 있으며 그렇지 않으면 이를 인식하여 사용할 수 없습니다. 당연히 그것을 처리하는 기본 GBK입니다. 소위 BOM 헤더를 올바르게 출력하는 방법은 코드를 참조하십시오.

$fp = fopen('./test_csv.csv', 'a');
fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF));//输出BOM头
fputcsv($fp, ['标题']);
fputcsv($fp, ['解决乱码']);
fclose($fp);

위의 개인 테스트는 소위 문자 왜곡 및 이모티콘 표현과 같은 비주류 문자의 정상적인 표시를 해결할 수 있습니다.

위 내용은 utf8로 인코딩된 PHP에서 내보낸 잘못된 CSV를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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