ホームページ >バックエンド開発 >PHPチュートリアル >PHP コードが CSV ファイルから BOM を削除できないのはなぜですか?
インポート後の .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 サイトの他の関連記事を参照してください。