PHP fputcsv encoding

自作多情 提交于 2019-12-03 16:18:20
Mihai Iorga

Default encoding for an excel file is machine specific ANSI, mainly windows1252. But since you are creating that file and maybe inserting UTF-8 characters, that file is not going to be handled ok.

You could use iconv() when creating the file. Eg:

function encodeCSV(&$value, $key){
    $value = iconv('UTF-8', 'Windows-1252', $value);
}
array_walk($values, 'encodeCSV');

It's Working: Enjoy
use this before fputcsv:

$line = array_map("utf8_decode", $line);

The file will be in whatever encoding your strings are in. PHP strings are raw byte arrays, their encodings depends on wherever the bytes came from. If you just read them from your source code files, they're in whatever you saved your source code as. If they're from a database, they're in whatever encoding the database connection was set to.

If you need to convert from one encoding to another, use iconv. If you need more in-depth information, see here:

Try the iconv function:

http://php.net/manual/en/function.iconv.php

To transform the members of the array you're passing to the fputcsv function to the encoding you want.

pr1nc3
fputs( $fp, $bom = chr(0xEF) . chr(0xBB) . chr(0xBF) );

Try this it worked for me!!!

$string = iconv(mb_detect_encoding($string), 'Windows-1252//TRANSLIT', $string);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!