Mengalih keluar BOM daripada Fail .csv Selepas Import: Penyelesaian Masalah
Apabila mengimport fail .csv, adalah penting untuk mengalih keluar Tanda Pesanan Byte ( BOM) untuk memastikan integriti dan keserasian data. Walau bagaimanapun, anda menyebut bahawa percubaan anda menggunakan preg_replace dan str_replace tidak berjaya. Mari analisa kod anda dan teroka pendekatan alternatif.
Kod anda bermula dengan membuka fail CSV untuk membaca menggunakan fopen. Anda kemudian cuba untuk praproses baris menggunakan fgetcsv dan menukarnya kepada UTF-8 menggunakan utf8_encode. Walau bagaimanapun, pengalihan keluar BOM tiada dalam bahagian ini.
Penyelesaian yang disediakan mencadangkan penambahan fungsi yang dipanggil removeBomUtf8 untuk mengalih keluar BOM secara eksplisit, yang biasanya muncul sebagai tiga bait pertama 0xEF, 0xBB dan 0xBF dalam UTF-8 fail yang dikodkan. Anda boleh memanggil fungsi ini pada kandungan fail sebelum memproses selanjutnya.
Selain itu, kod anda menimpa fail CSV asal dengan data yang diubah suai, yang mungkin menjejaskan operasi seterusnya. Untuk mengelakkan perkara ini, pertimbangkan untuk mencipta fail sementara, mengubah suai data di sana, dan kemudian mengalihkannya kembali ke lokasi asal.
Berikut ialah versi terkini kod anda yang menggabungkan fungsi penyingkiran BOM dan pencegahan tiruan fail:
<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>
Pendekatan ini harus mengalih keluar BOM dengan berkesan, menghalang fail ganti dan mengekalkan fungsi kod asal anda.
Atas ialah kandungan terperinci Mengapa Kod PHP Saya Gagal Mengalih Keluar BOM daripada Fail CSV?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!