PHP fgetcsv escape'\';
csv文件的一条记录中包含“\”字符,我无法获得数组中键值对的确切数目 我正在使用PHP fgetcsv函数,如下所示-PHP fgetcsv escape'\';,php,Php,csv文件的一条记录中包含“\”字符,我无法获得数组中键值对的确切数目 我正在使用PHP fgetcsv函数,如下所示- while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { .... } 我还尝试过如下方式对字符进行转义 while (($data = fgetcsv($handle, 1000, ",",'"',"\\")) !== FALSE) { .... } 但它不起作用。可能的解决方案是什么?您可
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
....
}
我还尝试过如下方式对字符进行转义
while (($data = fgetcsv($handle, 1000, ",",'"',"\\")) !== FALSE) {
....
}
但它不起作用。可能的解决方案是什么?您可能需要手动修复该文件。如果文件只有一个斜杠,那是最快的 许多程序无法正确导出为csv格式
如果这是经常发生的事情,您可能希望在导入时修复源代码或更正信息。我不想在这件事上做necro,我没有足够的影响力来回复您的答案,但这行
$handle = @fopen($filename, "r");
if ($handle) {
while (($buffer = fgets($handle, 4096)) !== false) {
$buffer = preg_replace('/(\\\",)/','\\ ",',$buffer);
$buffer = preg_replace('/(\\\"("?),)/',' ',$buffer);
$data[] = str_getcsv($buffer);
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
$data[] = str_getcsv($buffer);
应该读
$data = str_getcsv($buffer);
这对我很有效。我也遇到了同样的问题,我用这种方法解决了它
while (($data = fgetcsv($file, 0, "\t", '"', "\\")) !== FALSE) {
$val_arr = explode(",",$data[0]);
//here, you can get each column values from $val_arr
....
}
我也有同样的问题,解决起来太容易了。如果你的字符串外壳字符是“”(双引号),并且你不想把反斜杠当作一个转义字符,只需将双引号作为字符串隐藏和转义字符通知两次。
$data = fgetcsv($handle, 8192, ';' , '"' , '"' );
您好,我在.csv中有一个类似的pb,它会剥离一些
\”
,所以根据Sitansu上面所说的,我做了:
if (($handle = fopen($input_csv, "r")) !== FALSE)
{
while (($buffer = fgets($handle)) !== false)
{
$buffer = str_replace('\""', '\\"', $buffer);
$row = str_getcsv($buffer);
// Do stuff on cells.
}
...
}
您是否尝试过转义CSV文件本身中的“\”。我总是确保以CSV格式保存到平面文件的任何内容都通过
addslashes()
运行。为了避免这个问题,我只在本地运行了一些测试fgetcsv()
在读取每行时将自动转义字符,而无需将转义字符串设置为默认值反斜杠。我认为这不是你的问题。脚本中是否使用1000作为任意长度?当反斜杠位于.csv文件中单元格的末尾时,escape不起作用。由于csv文件是在某个远程服务器中创建的,并且我正在使用ftp导入,而且它是一个cron作业,它包含大量记录,我无法手动编辑。是否有其他可能的解决方案?修复以编程方式解决问题。使用fgets()
,修复损坏的东西,然后通过str\u getcsv()
运行修复字符串,谢谢Evan。这很有效。我已将其放在我的答案部分。