【问题标题】:Creating carriage returns in csv cell via php通过php在csv单元格中创建回车
【发布时间】:2011-04-30 20:42:26
【问题描述】:

我正在尝试动态生成一个 csv 文件,其中包含一些包含多行的单元格,例如,地址字段将需要分组到单个“地址”单元格中,而不是地址、城市、州等。一切都是进展顺利,但在过去的两天里,我尝试在代码中插入 \r、\r\n、\n、chr(10)、chr(13) 以及回车以创建回车我在牢房内寻找。所有这些都失败了,要么在我的 csv 中按字面意思打印为“\r”等,要么当我在代码中执行手动回车时,它会生成一个新行。我正在使用它在我的单元格中创建中断,但它不起作用

$groupedCell = implode('\r',$data);

我很确定代码是正确的,因为它将 \r 放置在我想要回车但不是我正在寻找的实际返回的位置。我尝试了一些不同的编码,但仍然没有运气,我正在 Open Office 中进行测试,我猜这可能是问题所在,但我认为它可以处理单元格内的回车,并且我没有看到任何其他支持的文档。感谢阅读!

【问题讨论】:

  • 科林,你在这方面有什么进展吗?问题是基于 PHP(可以在 PHP 中使用单引号中的转义序列)还是基于 CSV 规范(转义单元内换行符的各种方式)?
  • 我最终没有打破界限。我在这里尝试了所有解决方案,但没有任何效果。我在没有帮助的情况下尝试了单引号和双引号,尽管很高兴知道您需要使用双引号进行转义。也许 CSV 无法以普遍支持的方式拥有此功能?
  • 事情是两件不同的事情:在 PHP 中使用双引号来使用转义序列。但有时只有双引号用于在 CSV 单元格中转义。
  • 确实,我认为这与软件如何处理 csv 有关,而不是 PHP 如何生成它

标签: php mysql csv openoffice.org


【解决方案1】:

您需要使用"\r"。您不能在单引号字符串中使用转义字符(\' 除外)。 '\n''\r' 是文字反斜杠,后跟 nr,而 "\n""\r" 分别是换行符和回车符。

至于在 CSV 文件中插入新行,这取决于您的实施。 CSV 没有标准,因此您必须根据您提供 CSV 数据的系统来确定要使用的格式。有些人可能接受'\n' 序列并将其解释为换行符,其他人可能允许在单元格用引号引起来的情况下使用文字换行符,还有一些人根本不接受换行符。

【讨论】:

  • 我不知道,我会给双引号一个旋转。这可以解释为什么要按字面意思处理字符串!
【解决方案2】:

CSV spec 是我发现以多种不同方式实现的一个...基本上看起来它只是半规范的,考虑到它的受欢迎程度,这令人沮丧。

要在 CSV 的单元格中包含换行符,可能需要换行单元格,或者可能需要转义换行符。您会从链接的文档中注意到,有三种方法可以做到这一点 - 不同的程序对待它的方式不同:

  1. Excel 将整个单元格用双引号括起来:一个单元格中可以包含(未转义的)换行符并被视为单个单元格,只要它用双引号括起来(还请注意,您需要使用 excel 样式双引号在单元格内容中转义)
  2. 其他程序在字符前插入一个反斜杠,因此以\ 结尾的行不被视为行尾,而是单元格内的换行符。单元格内可以包含未转义的换行符,只要它们前面有反斜杠字符即可。
  3. 其他人仍然用 C 风格的字符转义替换换行符,实际字符序列 \n\r\n。在这种情况下,单元格已完全转义换行符。

问题因可能需要转义控制字符(以及其他内容(例如 #1 中的 " 和 #2+3 中的 \)和不同样式的转义(例如嵌入的引号可以转义为:双双引号 "" 或反斜杠双引号 \")

我的建议:生成一个带有多行和关键转义字符的 open-office 文档,看看 open-office 如何生成一个CSV 文件。从那里您可以决定在单元格中使用上述哪种方法来换行,以及哪种转义方法。

style-1 示例(excel):

#num,str,num
1,"Hello
World",1990
2,"Yes",1991

style-2 示例:

#num,str,num
1,Hello \
Word,1990
2,Yes,1991

style-3 示例:

#num,str,num
1,Hello \nWorld,1990
2,Yes,1991

【讨论】:

    【解决方案3】:
    1. 创建了一个包含 3 列的 Excel 2010 工作表。
    2. 添加了带有字面值的标题行:一、二、三
    3. 添加了 1 个具有文字值的数据行:abc、abc、abc,但在第 2 列中,我在每个字母后按 ALT+ENTER 以创建回车和换行。
    4. Did SAVE AS > OTHER 并选择 CSV 而忽略警告。
    5. 使用 NOTEPAD++ 检查 CSV 数据并单击工具栏中的“显示所有字符”按钮。

    可以看到以下内容:

    one, two, three[CR][LF]
    abc,"a[LF]
    b[LF]
    c",abc[CR][LF]
    

    希望这有助于澄清。

    【讨论】:

      猜你喜欢
      • 2016-10-28
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      相关资源
      最近更新 更多