在php中使用fputcsv将utf-8字符写入文件

Yus*_*sef 34 php encoding character-encoding

我想在PHP中尝试用CSV文件写波斯字符,我正在使用fputcsv函数但是如何将UTF-8字符写入CSV文件fputcsv

我的部分代码:

$df = fopen($filepath, 'w');
fputcsv($df, array($coupon->code, $discount->label));
Run Code Online (Sandbox Code Playgroud)

Har*_*rdy 123

试试这个:

$df = fopen($filepath, 'w');
fprintf($df, chr(0xEF).chr(0xBB).chr(0xBF));
fputcsv($df, array($coupon->code, $discount->label));
Run Code Online (Sandbox Code Playgroud)

该行fprintf($df, chr(0xEF).chr(0xBB).chr(0xBF));写入文件头以进行正确的编码.

  • 您能否解释一下这三个字符是什么以及它们在修复 UTF8 问题中的目的是什么? (2认同)
  • @AhmadBaktashHayeri 这些字节构成了 UTF-8 的字节顺序标记 (BOM) (2认同)

rob*_*hes 26

试试这个:

$df = fopen($filepath, 'w');
$array = array($coupon->code, $discount->label);
$array = array_map("utf8_decode", $array);
fputcsv($df, $array);
Run Code Online (Sandbox Code Playgroud)

  • 这会将您的 UTF8 字符串**解码**为单字节 ISO-8859-1。这**不是 OP 所要求的。 (2认同)

Syn*_*yno 8

如果您想为 Excel 创建 UTF-8 文件,请使用以下简单的解决方案:

$fp = fopen($filename, 'w');

//add BOM to fix UTF-8 in Excel 
fputs($fp, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
Run Code Online (Sandbox Code Playgroud)

请参阅PHP 官方页面上的原始答案。