현재 위치: > 최신 기사 목록> CSV 파일을 읽기 위해 fgetcsv를 사용하는 경우 어떻게해야합니까? 코딩 문제에 대한 자세한 솔루션

CSV 파일을 읽기 위해 fgetcsv를 사용하는 경우 어떻게해야합니까? 코딩 문제에 대한 자세한 솔루션

gitbox 2025-06-08

1. FGETCSV를 사용할 때 왜 차량 코드가 나타 납니까?

FGETCSV () 는 PHP가 CSV 파일을 행으로 읽고 각 데이터 라인을 배열로 반환하기 위해 제공하는 편리한 기능입니다. 그러나 자동으로 트랜스 코드되지 않습니다. GBK 또는 BIG5 인코딩에 저장된 파일을 읽고 PHP 환경 또는 웹 페이지 출력이 UTF-8 인 경우 출력이 멍청하게 나타납니다.


2. 차량 코드 문제 해결의 핵심 : 트랜스 코딩

Breadbled 문제를 해결하려면 원래 인코딩에서 각 데이터 행을 읽은 후 대상 인코딩 (일반적으로 UTF-8)으로 변환해야합니다. 이것은 일반적으로 php의 mb_convert_encoding () 또는 iconv () 함수를 통해 달성됩니다.


3. 코드 예제를 완료하십시오

UTF-8으로 올바르게 표시하려는 GBK 인코딩 된 CSV 파일이 있다고 가정 해 봅시다. 다음 코드를 사용할 수 있습니다.

<코드> <? php

$ filename = "data.csv"; // CSV 파일이 GBK 인코딩되었다고 가정합니다
$ hone = fopen ($ filename, "r");

if ($ hands! == false) {
while (($ data = fgetcsv ($ hands))! == false) {
// 각 열을 GBK에서 UTF-8로 변환합니다
foreach ($ data as & $ field) {
$ field = mb_convert_encoding ($ field, "utf-8", "gbk");
}
비 설정 ($ field); // 인용 문제를 피하십시오

     print_r($data); // 트랜스 코딩 된 컨텐츠를 출력하십시오
}
fclose($handle);

} 또 다른 {
echo "파일을 열 수 없다 : $ filename";
}

?>
</코드>


4. 자동 탐지 및 코딩 (고급 관행)

파일의 원래 인코딩이 무엇인지 확실하지 않은 경우 mb_detect_encoding ()을 사용하여 자동으로 감지 할 수 있습니다.

<코드> <? php

$ filename = "data.csv";
$ hone = fopen ($ filename, "r");

if ($ hands! == false) {
$ firstline = fgets ($ 핸들);
되감기 ($ 핸들); // 첫 번째 줄을 읽은 후 포인터는 파일의 시작 부분으로 돌아갑니다.
$ encoding = mb_detect_encoding ($ firstline, [ "gbk", "utf-8", "big5", "sjis"], true);
if (! $ encoding) {
$ encoding = "gbk"; // 감지 할 수없는 경우 GBK는 기본적으로 사용됩니다.
}

 while (($data = fgetcsv($handle)) !== false) {
    foreach ($data as &$field) {
        $field = mb_convert_encoding($field, "UTF-8", $encoding);
    }
    unset($field);
    print_r($data);
}
fclose($handle);

} 또 다른 {
echo "파일을 열 수 없습니다";
}

?>
</코드>


5. 브라우저를 통해 CSV가 업로드되면 어떻게됩니까?

사용자가 업로드 한 CSV 파일이 다른 운영 체제 (Windows, Mac, Linux)에서 나올 수 있거나 다른 소프트웨어 (Excel, WPS)에 의해 저장 될 수있는 경우, 현재 문자 인코딩은 더욱 통제 할 수 없습니다. 업로드 후 인코딩을 균일하게 처리 한 다음 fgetcsv () 로 읽는 것이 좋습니다.

업로드 된 CSV 파일을 임시 파일로 저장하고 Unified Processing을위한 위의 자동 감지 + 트랜스 코딩 방법을 사용하는 것을 고려할 수 있습니다.

<코드> <? php

if (isset ($ _ files [ 'csvfile']) && $ _files [ 'csvfile'] [ 'error'] === upload_err_ok) {
$ tmpfile = $ _files [ 'csvfile'] [ 'tmp_name'];
$ hone = fopen ($ tmpfile, "r");

 if ($handle !== false) {
    $firstLine = fgets($handle);
    rewind($handle);
    $encoding = mb_detect_encoding($firstLine, ["GBK", "UTF-8", "BIG5", "SJIS"], true);
    if (!$encoding) {
        $encoding = "GBK";
    }

    while (($data = fgetcsv($handle)) !== false) {
        foreach ($data as &$field) {
            $field = mb_convert_encoding($field, "UTF-8", $encoding);
        }
        unset($field);
        print_r($data);
    }
    fclose($handle);
} else {
    echo "업로드 된 파일을 읽을 수 없습니다";
}

} 또 다른 {
Echo "업로드 실패 또는 파일이 유효하지 않습니다";
}

?>
</코드>