使用日文字符和电子邮件在PHP中创建CSV文件,字符转换为?

时间:2017-11-17 09:14:36

标签: php csv character-encoding cjk

我有一个页面,访问时执行SQL查询并创建包含结果的CSV,然后将结果通过电子邮件发送给我。

然而,数据库中的日文字符编码不正确,我收到的CSV文件只有?代替每个日文字符。

我尝试更改“内容编码”,“内容传输编码”,“内容类型”以获得有效的设置,但无论我尝试什么,我仍然只看到??哪里应该有东京

这是我的代码,它可以动态生成CSV并发送它。

$headers = "From: ".$email_from;


$random_hash = md5(date('r', time())); 
$mime_boundary = "==Multipart_Boundary_x{$random_hash}x";


$headers .= "\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\"";


$email_message = "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type:text/html; charset=\"UTF-8\"\n" .
"Content-Transfer-Encoding: UTF-8\n\n" .
$this->email_html_msg . "\n\n";

$files_attached_cnt = 0;
foreach ($this->arr_file_data AS $file_data) {

  $csv_file = $this->buildCSV($file_data, $mysqli);

  if ($csv_file != "") {
    $files_attached_cnt += 1;

    $data = $csv_file;

    $email_message .= "--{$mime_boundary}\n";

    $email_message .= "Content-Type: application/csv; charset=\"UTF-8\"\n" .
    " name=\"{$file_data['csv_file_name']}\"\n" .
    "Content-Disposition: attachment;\n" .
    " filename=\"{$file_data['csv_file_name']}\"\n" .
    "Content-Transfer-Encoding: UTF-8\n" .
    "Content-Encoding: UTF-8\n\n" .
    $data . "\n\n";
  }
}

$email_message .= "--{$mime_boundary}--\n";

$this->arr_file_data = array();

if ($this->debugFlag) {
  echo "FINISHED.";
}

我是否需要完全更改我的代码,或者是否存在可在此实例中使用的编码设置?

提前致谢

1 个答案:

答案 0 :(得分:0)

发现答案是在我实际启动查询之前将我的sql查询字符集设置为utf8,

我添加了这个

$mysqli->set_charset('utf8');

在指定mysqli对象之后。