PHP fputcsv encoding

2019-03-31 00:17发布

问题:

I create csv file with fputcsv. I want csv file to be in windows1251 ecnding. But can't find the solution. How can I do that? Cheers

回答1:

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');


回答2:

It's Working: Enjoy
use this before fputcsv:

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


回答3:

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:

  • What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text
  • Handling Unicode Front To Back In A Web App


回答4:

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.



回答5:

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

Try this it worked for me!!!



回答6:

$string = iconv(mb_detect_encoding($string), 'Windows-1252//TRANSLIT', $string);