编码口音csv - PHP

时间:2013-12-15 20:23:46

标签: php mysql encoding character-encoding

我一直在查看所有答案,但我找不到解决方案。

这是我得到的:

MySQL: 数据库&表格编码=> utf8_unicode_ci

我正在尝试将数组(包含查询中的行)转换为CSV

然而,当我打开csv时,我得到了这个

Prénom 

而不是

Prénom

这是我的代码

$allQueryRows = array();
while($row_query = $stmt_select->fetch(PDO::FETCH_ASSOC)){
    $row_query = array_map("utf8_encode", $row_query);
    array_push($allQueryRows, $row_query);
}
download_send_headers("csv" . date("Y-m-d") . ".csv");
echo array2csv($allQueryRows);
die();


function array2csv(array &$array)
{
   if (count($array) == 0) {
     return null;
   }
   ob_start();
   $df = fopen("php://output", 'w');
   fputcsv($df, array_keys(reset($array)));
   foreach ($array as $row) {
      fputcsv($df, $row);
   }
   fclose($df);
   return ob_get_clean();
}

function download_send_headers($filename) {
    // disable caching
    $now = gmdate("D, d M Y H:i:s");
    header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
    header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
    header("Last-Modified: {$now} GMT");

    // force download  
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");

    // disposition / encoding on response body
    header("Content-Disposition: attachment;filename={$filename}");
    header("Content-Transfer-Encoding: binary");
}

2 个答案:

答案 0 :(得分:0)

您应该在SET NAMES utf8;查询之前发送SELECT MySQL查询,而不是array_mapping之后的数据。

然后在HTTP标头中发送

Content-Type: text/csv; charset=utf-8;

答案 1 :(得分:0)

乍一看,它看起来像是一个utf-16 / utf-8问题。以下是如何开始诊断它:

首先,当你说,“但是当我打开csv时,我得到了这个”你是什么意思“打开”,即打开什么?

我建议用十六进制查看文件以确切了解文件中的内容。可能是您在(编辑器或其他)中打开它的原因是导致显示的原因进入你的眼球是错误的,或者你的开放计划看到的基础数据可能是错误的。我想你需要先解决这个问题。

(提示:一般来说,这是分裂和征服的旧过程:找到一种方法来测试问题中间的某个地方,看看你系统的哪一半导致问题。最快的结果来自挑选测试点大约在复杂性中间的一半,而不是问题的边缘,即布尔搜索错误。它可能在第一次迭代中找不到问题,但它会帮助缩小范围。)

也许您需要告诉SQL使用哪个,例如$连接 - > set_charset( “UTF8”);

或许你所看到的实际上显示的是与你认为的不同,因为utf8 / utf16显示级别混淆。我一般用utf8设置,所以设置Content-Type:text / plain;字符集= UTF-8; (另外,如果您通过编辑器查看此文件,请确保将其设置为正确的字符空间。)