Rumah > pembangunan bahagian belakang > tutorial php > Mengapa Kod PHP Saya Gagal Mengalih Keluar BOM daripada Fail CSV?

Mengapa Kod PHP Saya Gagal Mengalih Keluar BOM daripada Fail CSV?

Susan Sarandon
Lepaskan: 2024-11-03 05:36:02
asal
433 orang telah melayarinya

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

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan