导出为 CSV 文件时分号拆分字段?
Posted
技术标签:
【中文标题】导出为 CSV 文件时分号拆分字段?【英文标题】:Semicolon splits fields when export as a CSV file? 【发布时间】:2014-07-04 16:55:52 【问题描述】:我从我的 magento 网站以 csv 格式导出了评论。评论包含:,;,?,!
等。通常评论在字段中很好。当评论包含 ;
时,它会被拆分到下一个字段。 (我使用 OpenOffice 电子表格打开了 csv 文件)
例如:
Review -> It's nice to use; looks good.
现在输出 ->
Field A-> It's nice to use
Field B-> looks good
预期输出
Field A ->It's nice to use; looks good
我使用以下标头在 php 中导出为 acsv 文件
header('Content-type: application/utf-8');
header('Content-disposition: attachment; filename="file.csv"');
我怎样才能得到我的预期输出?
【问题讨论】:
这与 PHP 无关,与如何让 Openoffice 导入该文件有关。如果 OO 将;
视为分隔符,那么这不是 PHP 的错。你告诉 PHP 使用;
。如果 ;
自然地在您的文本中,并且您将其用作 CSV 分隔符,那么这又是您的错。 CSV 是最后的导出格式,因为在 CSV 中封装/转义文本没有通用标准。有些引擎可能喜欢\;
,有些引擎可能想要;;
。
iirc 有一些方法可以转义分号/任何分隔符,但实际上,只需使用其他东西作为分隔符。 \t 也许。
另外,如果你把你的字符串放在“引号”中,它没有帮助吗?
@MightyPork 是的,即使我遇到了这个问题,我也使用过引号!
这完全取决于您在 CSV 导入对话框中选择的内容。这真的是一种丑陋的格式,我在使用它时也遇到了问题。
【参考方案1】:
我建议从另一方面解决问题 - 我相信这是 Magento 争论的焦点,因为一些用户想要分号。
我建议查看您使用 openoffice 的方式 - 已经有一段时间了,但我相信在加载 csv 期间有一个名为“分隔符选项”的选项 - 更改这些,一切都会正常工作。
可悲的是,如果这是正确的答案,那就离题了 :-( 但我希望这可以帮助您实现目标!
谢谢, //P
【讨论】:
是的!你说的对。我可以看到分隔符选项。【参考方案2】:我正在使用我制作的这个类将数据导出为 CSV 电子表格。诀窍是fputcsv()
,它应该正确格式化。然后,当然,您必须将其正确导入 OpenOffice(或现在的 LibreOffice),但那是另一回事。
也许它会帮助你。
<?php
class Spreadsheet
private $grid = array();
/**
* Set cell value at position X, Y
*/
public function setCell($x, $y, $value)
for($yy=0; $yy<=$y; $yy++)
if(!isset($this->grid[$yy]))
$this->grid[$yy] = array();
for($xx=0; $xx<=$x; $xx++)
if(!isset($this->grid[$y][$xx]))
$this->grid[$y][$xx] = null;
$this->grid[$y][$x] = $value;
/**
* final command executed, including "exit".
* Sends CSV to browser.
*/
public function sendAsCsv(/*string*/ $filename)
header('Content-type: text/csv; charset=utf-8');
header('Content-Language: cs');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header("Pragma: no-cache");
header("Expires: 0");
ob_end_clean();
$outputBuffer = fopen("php://output", 'w');
$this->appendToFile($outputBuffer);
fclose($outputBuffer);
exit;
/**
* Appends content to a file (rarely used outside this class)
*/
public function appendToFile(/*resource*/ $fileHandle)
foreach($this->grid as $val)
fputcsv($fileHandle, $val);
【讨论】:
当然我不知道 Magento 是什么,但我相信你可以让它与这个类一起工作。只需填写单元格,然后导出。以上是关于导出为 CSV 文件时分号拆分字段?的主要内容,如果未能解决你的问题,请参考以下文章