导入后从 .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中文网其他相关文章!