匯入後從.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中文網其他相關文章!