php - 在 php 中生成带有换行符的 csv 时出现小故障

标签 php mysql excel csv

我只是根据存储在 mysql 表中的数据生成一个 csv 文件。生成的 csv,在 excel 中打开时,似乎基本没问题,但只要有换行符,excel 就会将数据放在新行中。知道如何防止这种情况发生吗?

示例数据

line 1 some data
another data

CSV 生成代码:

header("Content-Type: text/csv; charset=UTF-8");
header("Content-Disposition: attachment; filename=\"".$MyFileName."\"");
$filename = $MyFileName;
$handle = fopen("temp_files/".$filename, "r");
$contents = fread($handle, filesize("temp_files/".$filename));
fclose($handle);
echo $contents;  
exit;

内容片段我曾经摆脱换行(没用):

$pack_inst = str_replace(',',' ',$get_data->fields['pack_instruction']);
        $pack_inst = str_replace('\n',' ',$pack_inst);
        $pack_inst = str_replace('\r',' ',$pack_inst);
        $pack_inst = str_replace('\r\n',' ',$pack_inst);
        $pack_inst = str_replace('<br>',' ',$pack_inst);
        $pack_inst = str_replace('<br/>',' ',$pack_inst);
        $pack_inst = str_replace(PHP_EOL, '', $pack_inst);
        $pattern = '(?:[ \t\n\r\x0B\x00\x{A0}\x{AD}\x{2000}-\x{200F}\x{201F}\x{202F}\x{3000}\x{FEFF}]|&nbsp;|<br\s*\/?>)+';
        $pack_inst = preg_replace('/^' . $pattern . '|' . $pattern . '$/u', ' ', $pack_inst);
        $content .=','.$pack_inst;

最佳答案

根据 RFC 4180 , 如果列的内容包含行分隔符 (\r\n)、列分隔符 (,) 或字符串分隔符 (")那么您必须将内容括在双引号 " 中。当您这样做时,您必须通过在它们前面加上另一个 " 来转义内容中的所有 " 字符。所以下面的 CSV 内容:

1: OK,2: this "might" work but not recommended,"3: new
line","4: comma, and text","5: new
line and ""double"" double quotes"
1: Line 2

将生成 2 行 CSV 数据,第一行包含 5 列。

话虽如此,看看fputcsv()功能。它将为您处理大部分血淋淋的细节。

关于php - 在 php 中生成带有换行符的 csv 时出现小故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10781431/

相关文章:

php - 如何使用不带按钮和 JavaScript 的选择框加载数据库内容

php - 如何在php中在特定日期或时间自动发送电子邮件?

mysql - Oracle Developer 在 PHPmyAdmin 中工作,语法错误

VBA Excel Outlook 电子邮件正文格式

vba - Excel VBA - 根据单元格地址获取表格名称

php - 对遗留 php 应用程序进行单元测试 — 如何防止意外的数据库调用

php - 如何从连接在局域网上的另一台电脑上使用存储在一台电脑上的数据库

java - 一次执行多个 native 查询

javascript - 如何使用 javascript onclick 触发 mysql 语句?

c# - 从 Process 或 .NET 中的 hwnd 获取 Excel.Application 对象