You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免PHP中使用fputcsv导出文本时出现多余双引号?

解决PHP fputcsv导出文本时出现多余双引号的问题

问题原因

你遇到的多余双引号是fputcsv的默认行为——这个函数是专门为生成符合CSV规范的内容设计的:

  • 当字段包含空格、逗号、双引号这类特殊字符时,它会自动用双引号包裹整个字段;
  • 如果字段本身包含双引号,它会转义成两个连续的双引号(比如你示例里的DIGIT=""703901943"")。
    而你的需求是导出纯文本命令,不需要CSV的格式化规则,所以这些引号就变成了多余的内容。

两种解决方法

方法一:改用fwrite直接写入(推荐)

既然你不需要CSV格式,直接用fwrite把查询到的字符串写入文件即可,完全规避fputcsv的自动引号逻辑:

// 打开文件
$handle = fopen('output.txt', 'w');
// 执行查询
$result = mysqli_query($conn, $sql);

while ($row = mysqli_fetch_assoc($result)) {
    // 直接写入你的字段内容,加上换行符保证每行独立
    fwrite($handle, $row['A'] . PHP_EOL);
}

// 关闭文件
fclose($handle);

这种方式最直接,完全按照你查询结果里的原始内容输出,不会添加任何额外字符。

方法二:调整fputcsv的参数(如果一定要用这个函数)

如果你因为某些原因必须使用fputcsv,可以通过修改它的参数来禁用自动添加引号的行为:

  • 第三个参数$enclosure设置为空字符串'',关闭字段包围符;
  • 第二个参数$delimiter设置一个不会出现在你内容里的字符(比如|),避免分隔符干扰;
  • (PHP 7.1+可选)第四个参数$eol设置为PHP_EOL,保证换行符符合系统规范。

代码示例:

$handle = fopen('output.txt', 'w');
$result = mysqli_query($conn, $sql);

while ($row = mysqli_fetch_assoc($result)) {
    // 将字段作为数组唯一元素传入,关闭包围符
    fputcsv($handle, [$row['A']], '|', '');
}

fclose($handle);

验证结果

用以上两种方法后,导出的内容会和你期望的一致:

SET: NEID=35; ADD OPDNAL:ENTR=571,DIGIT="703901943",NANNAT=ALL,NAME="Calling Filter",RATIO2=0;

内容的提问来源于stack exchange,提问作者Meena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:42:48