Php 如何避免fgetcsv/fputcsv函数中的$escape参数

Php 如何避免fgetcsv/fputcsv函数中的$escape参数,php,escaping,double-quotes,fgetcsv,Php,Escaping,Double Quotes,Fgetcsv,我不确定什么是好的参数 array fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = "," [, string $enclosure = '"' [, string $escape = "\" ]]]] ) 默认值为反斜杠。CSV规范不需要任何转义字符。值中的封闭字符加倍,并且在封闭值时,分隔符或换行符都不会出现问题。我在CSV文件中有这样的行: "value1 can contain qoutes li

我不确定什么是好的参数

array fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = "," [, string $enclosure = '"' [, string $escape = "\" ]]]] )
默认值为反斜杠。CSV规范不需要任何转义字符。值中的封闭字符加倍,并且在封闭值时,分隔符或换行符都不会出现问题。我在CSV文件中有这样的行:

"value1 can contain qoutes like this (""), comma (,) and
new line","value2\"" contains desired backslash, quote and later comma.","value3 is simple"
结果是不必要的。在最后一个参数中强制使用转义字符将中断读取此行,并生成4个值,而不是3个值。value2中的反斜杠将位于第一个引号内,第二个引号应为封闭字符。然后,稍后提交的coma用作不需要的项目分隔符


如何避免使用转义字符?传递空字符串会导致警告“必须传递单个字符”。传递一些不太可能的字符会有帮助(已证明),但当我使用更多的多语言8位编码(windows-1250、windows-1252、windows-1256等)时,它是不可靠的。

没有“csv规范”。只是有一个通用的“看起来有点像这样”的协议,但每个应用程序都可以/将有不同的做法。有些将转义引号为
\“
,有些将转义引号为
”“
。你可以制作一个csv,它可以在任何地方工作。您只能制作一个csv,该csv将与某些特定的应用程序一起使用。是的,如果要嵌入的数据包含用于分隔该字段的字符,则确实需要转义。
Smith,Fred
是一个字段(也称全名),还是两个字段:firstname,lastname?@MarcB是用
$enclosure
包装的:
“Smith,Fred”
。我没有试过,但是你试过传递
null
?@Barmar:如果字段本身包含enclosure字符呢?这就是为什么你需要逃跑
“Fred”Smith”
@MarcB他在问题中表明:你将它加倍
“Fred”Smith”
。没有“csv规范”。只有一个通用的“通常看起来有点像这样”的协议,但每个应用程序都可以/将以不同的方式执行。有些应用程序将以
\“
的形式转义,有些应用程序将以
的形式转义。你可以制作一个csv,它可以在任何地方工作。您只能制作一个csv,该csv将与某些特定的应用程序一起使用。是的,如果要嵌入的数据包含用于分隔该字段的字符,则确实需要转义。
Smith,Fred
是一个字段(也称全名),还是两个字段:firstname,lastname?@MarcB是用
$enclosure
包装的:
“Smith,Fred”
。我没有试过,但是你试过传递
null
?@Barmar:如果字段本身包含enclosure字符呢?这就是为什么你需要逃跑<代码>“弗雷德·史密斯”
@MarcB他在问题中表示:你把它加倍
“弗雷德·史密斯”