如何在php中生成带有良好渲染引号的UTF8 CSV文件?

时间:2013-10-16 15:27:10

标签: php symfony csv utf-8

我想在php中创建一个CSV文件,用UTF-8编码,所有字符都很好地渲染(甚至是重音符号,因为我是法语),除了引号,它们呈现为“'”。 / p>

任何人都可以帮助我吗?

以下是我的代码示例,在Symfony2

$response = new Response();
$response->headers->set('Content-Type', 'text/csv');
$response->headers->set('Content-disposition', 'attachment; filename="'.$name.'.csv"');
$response->setContent(utf8_decode($csv));
$response->setStatusCode(200);

非常感谢

2 个答案:

答案 0 :(得分:0)

一些指示:

  1. utf8_decode生成ISO-8859-1内容。因此,您的输出不是UTF-8。

  2. '在UTF-8,ASCII,Windows-1252和ISO-8859-1中相同

  3. 我怀疑'来自您的CSV来源。

  4. 如果您正在构建源代码,请确保使用UTF-8字符。那你就不需要转换了。如果您正在从磁盘读取,请确保您知道原始字符集。除非您知道原始字符集,否则不要转换字符集。

答案 1 :(得分:0)

这是对我有用的解决方案。 我使用的是 Symfony 4.4。

headers => 包含您的标题。
lines => 包含您的台词。

$response = new StreamedResponse();
$response->headers->set('Content-Type', 'application/force-download');
$response->headers->set('Content-Disposition', $response->headers->makeDisposition(
    ResponseHeaderBag::DISPOSITION_ATTACHMENT,
    'export.csv'
));

$response->setCallback(function () use ($headers, $lines) {
    $handle = fopen('php://output', 'w+');
    // Mandatory: Use bom + "Content-Type: application/force-download" => to allow to display special characters with excel
    fwrite($handle, $bom = chr(hexdec('EF')).chr(hexdec('BB')).chr(hexdec('BF')));
    // headers
    fputcsv($handle, $headers, ';');
    // data
    foreach ($lines as $line) {
        fputcsv($handle, $line, ';');
    }
    fclose($handle);
});