首页  >  文章  >  后端开发  >  为什么我的 PHP 代码无法从 CSV 文件中删除 BOM?

为什么我的 PHP 代码无法从 CSV 文件中删除 BOM?

Susan Sarandon
Susan Sarandon原创
2024-11-03 05:36:02331浏览

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,通常在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn