codememo

fputcsv를 사용하여 CSV 파일에 BOM 추가

tipmemo 2023. 8. 31. 23:54
반응형

fputcsv를 사용하여 CSV 파일에 BOM 추가

저는 외국어 문자가 포함된 간단한 CSV 파일을 생성하고 있습니다.바이트 순서 표시를 포함하지 않으면 Excel에 외국어 문자가 제대로 나타나지 않습니다(BOM이 있을 때는 정상적으로 나타납니다).

파일이 처음 생성될 때 파일의 시작 부분에 BOM을 추가하려면 어떻게 해야 합니까?제가 다음을 시도해봤는데 작동하지 않습니다 :-/

function processForm($competition, $competitionEntry) {
    $BOM = "\xEF\xBB\xBF"; // UTF-8 BOM

    $filename = $competition->ID.".csv";
    $file = "entries/".$filename;     

    $fields = array_keys($competitionEntry);
    $submittedForm = $competitionEntry;

    if(file_exists($file)) {
        $fp = fopen($file, 'a');
        if($fp && 
            fputcsv($fp, $submittedForm) && 
            fclose($fp)) {
            return true;
        } 
    } else { // CREATE NEW FILE
        $fp = fopen($file, 'w');
        if($fp && 
            fputcsv($fp, $BOM) && // WRITE BOM TO FILE   
            fputcsv($fp, $fields) &&
            fputcsv($fp, $submittedForm) &&
            fclose($fp)) {     
            return true;
        } 
    }
    return false;
}

Mark Baker의 답변에 감사드립니다.

저는 fputcsv()가 아니라 fwrite()를 사용하여 BOM을 추가해야 했습니다.

작업 버전은 다음과 같습니다.

if(file_exists($file)) {
    $fp = fopen($file, 'a');
    if($fp && 
        fputcsv($fp, $submittedForm) && 
        fclose($fp)) {
        return true;
    } 
} else {
    $fp = fopen($file, 'w');
    fwrite($fp, $BOM); // NEW LINE
    if($fp &&    
        fputcsv($fp, $fields) &&
        fputcsv($fp, $submittedForm) &&
        fclose($fp)) {     
        return true;
    } 
}

고마워요, 마크!

언급URL : https://stackoverflow.com/questions/25686191/adding-bom-to-csv-file-using-fputcsv

반응형