为什么三个报价进入fopen,“”“aaaa”“”,“”“bbb”“”

时间:2012-02-11 10:04:48

标签: php

这是fopen

的一个例子
<?php

$list = array (
    array('aaa', 'bbb', 'ccc', 'dddd'),
    array('123', '456', '789'),
    array('"aaaa"', '"bbb"')
);

$fp = fopen('file.csv', 'w');

foreach ($list as $fields) {
    fputcsv($fp, $fields);
}

fclose($fp);
?>

它的输出是

aaa,bbb,ccc,dddd
123,456,789
"""aaaa""","""bbb"""

任何人都可以说我为什么在“”“aaaa”“”,“”“bbb”“”为什么三个引用代替一个。

5 个答案:

答案 0 :(得分:2)

因为您要转换的字符串中包含引号。报价通过加倍转换为CSV文件,即"abc"变为""abc""。第三个引号是包装字符串的“普通”CSV引号。

您无需自行为fputcsv()提供引号,因此您只需使用array( 'aaa', 'bbb' )

答案 1 :(得分:0)

这是一种在字符串中包含双引号的方法 - 如果你只是写双引号,它将终止字符串,所以你必须以某种方式逃避它。选择在此处转义的特定机制是编写""

答案 2 :(得分:0)

因为双引号在CSV中是特殊的;示例字符串包含双引号,fputcsv通过将它们加倍来转义,并且因为字符串包含转义引号,所以它必须用另一对双引号括起来。这与fopen无关,而是CSV的工作方式。

答案 3 :(得分:0)

将您的foreach更改为:

foreach ($list as $fields) {
    foreach ($fields as $item) {
        fput($fp, $fields . ",");
    }
}

希望有所帮助。

答案 4 :(得分:0)

在第三个数组中有报价被转义:

 array('"aaaa"', '"bbb"')

在您拥有的CSV中:

"""aaaa""","""bbb"""
Fields with embedded double-quote characters must be quoted, and each of the embedded double-quote characters must be represented by a
     

一对双引号字符。

     1997年,福特,E350,“超级”,“豪华”“卡车”

http://en.wikipedia.org/wiki/Comma-separated_values