Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP fgetcsv escape'\';_Php - Fatal编程技术网

PHP fgetcsv escape'\';

PHP fgetcsv escape'\';,php,Php,csv文件的一条记录中包含“\”字符,我无法获得数组中键值对的确切数目 我正在使用PHP fgetcsv函数,如下所示- while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { .... } 我还尝试过如下方式对字符进行转义 while (($data = fgetcsv($handle, 1000, ",",'"',"\\")) !== FALSE) { .... } 但它不起作用。可能的解决方案是什么?您可

csv文件的一条记录中包含“\”字符,我无法获得数组中键值对的确切数目

我正在使用PHP fgetcsv函数,如下所示-

 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。这很有效。我已将其放在我的答案部分。