깨진 문자를 해결하는 방법: 1. iconv 함수를 사용하여 utf8을 GBK로 변환합니다. 구문 "$str = iconv('utf-8', 'GBK//IGNORE', $str));"; 내용을 출력하기 전에 BOM 헤더를 삭제하면 Excel에서 UTF-8임을 자동으로 인식할 수 있습니다.
추천: "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 중국어 웹사이트의 기타 관련 기사를 참조하세요!