首頁  >  文章  >  後端開發  >  為什麼我的 PHP 程式碼無法從 CSV 檔案中刪除 BOM?

為什麼我的 PHP 程式碼無法從 CSV 檔案中刪除 BOM?

Susan Sarandon
Susan Sarandon原創
2024-11-03 05:36:02331瀏覽

Why Does My PHP Code Fail to Remove BOM from CSV Files?

匯入後從.csv 檔案中刪除BOM:疑難排解

匯入.csv 檔案時,必須刪除位元組順序標記( BOM )以確保資料完整性和相容性。但是,您提到您使用 preg_replace 和 str_replace 的嘗試並沒有成功。讓我們分析您的程式碼並探索替代方法。

您的程式碼先使用 fopen 開啟 CSV 檔案進行讀取。然後,您嘗試使用 fgetcsv 預處理這些行,並使用 utf8_encode 將它們轉換為 UTF-8。但是,本節中缺少 BOM 刪除。

提供的解決方案建議新增一個名為removeBomUtf8 的函數來明確刪除 BOM,通常在 UTF-8 中顯示為前三個位元組 0xEF、0xBB 和 0xBF編碼的檔案。您可以在進一步處理之前對文件內容呼叫此函數。

此外,您的程式碼會用修改後的資料覆寫原始 CSV 文件,這可能會影響後續操作。為了防止這種情況,請考慮建立一個臨時文件,修改其中的數據,然後將其移回原始位置。

這是包含 BOM 刪除功能和檔案覆蓋預防功能的程式碼更新版本:

<code class="php">function removeBomUtf8($s){
    if(substr($s,0,3)==chr(hexdec('EF')).chr(hexdec('BB')).chr(hexdec('BF'))){
        return substr($s,3);
    }else{
        return $s;
    }
}

setlocale(LC_ALL, 'nl_NL');
ini_set('auto_detect_line_endings',TRUE);
require_once(ABSPATH.'wp-admin/includes/file.php' );

$path = get_home_path();
$filepath = $path .'wp-content/themes/pon/testing.csv';
$content = file_get_contents($filepath);
file_put_contents($filepath, str_replace("\xEF\xBB\xBF",'', $content));

// Create temporary file
$tempfile = tempnam(sys_get_temp_dir(), 'csv_');
fopen($tempfile, "w");

// Process lines and remove BOM
$file = fopen($filepath, "r") or die("Error opening file");
while(($line = fgetcsv($file, 1000, ";")) !== FALSE) {
    fputcsv(fopen($tempfile, 'w'), $line);
}

// Move temporary file to original location
fclose($file);
unlink($filepath);
rename($tempfile, $filepath);

// Continue your processing
...</code>

此方法應有效刪除 BOM、防止檔案覆寫並保留原始程式碼的功能。

以上是為什麼我的 PHP 程式碼無法從 CSV 檔案中刪除 BOM?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn