如何避免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
相关产品推荐
相关产品推荐

