ホームページ >バックエンド開発 >PHPチュートリアル >PHP コードが CSV ファイルから BOM を削除できないのはなぜですか?

PHP コードが CSV ファイルから BOM を削除できないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-03 05:36:02407ブラウズ

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 を明示的に削除することを提案しています。BOM は通常、UTF-8 の最初の 3 バイト 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。