在做项目时遇到运用外语的情况下,我们就会运用UTF-8编码。然则,在用PHP导出CSV文件时,假如写入的数据是运用UTF-8编码的日语、韩语之类的外文,就会涌现乱码。
要处理PHP生成CSV文件的乱码题目,只需要在文件的最先输出BOM头,通知windows CSV文件的编码体式格局,从而让Excel翻开CSV时采纳准确的编码。
相干引荐:《php教程》
什么是BOM
在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该涌现在现实传输中。UCS范例发起我们在传输字撙节前,先传输字符”ZERO WIDTH NO-BREAK SPACE”。如许假如接收者收到FEFF,就表明这个字撙节是Big-Endian的;假如收到FFFE,就表明这个字撙节是Little-Endian的。
因而字符”ZERO WIDTH NO-BREAK SPACE”又被称作BOM。UTF-8不需要BOM来表明字节递次,但可以用BOM来表明编码体式格局。字符”ZERO WIDTH NO-BREAK SPACE”的UTF-8编码是EF BB BF。所以假如接收者收到以EF BB BF开首的字撙节,就晓得这是UTF-8编码了。Windows就是运用BOM来标记文本文件的编码体式格局的。
在所有内容输出之前
print(chr(0xEF).chr(0xBB).chr(0xBF));
几个UTF编码的BOM头
define ('UTF32_BIG_ENDIAN_BOM' , chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF)); define ('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00)); define ('UTF16_BIG_ENDIAN_BOM' , chr(0xFE) . chr(0xFF)); define ('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE)); define ('UTF8_BOM' , chr(0xEF) . chr(0xBB) . chr(0xBF));
完全的代码:
header('Expires: 0'); header('Cache-control: private'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Content-Description: File Transfer'); header('Content-Encoding: UTF-8'); header('Content-type: text/csv; charset=UTF-8'); header('Content-Disposition: attachment;filename=Customers_Export.csv'); echo "\xEF\xBB\xBF"; // UTF-8 BOM // print(chr(0xEF).chr(0xBB).chr(0xBF));
以上就是php输出csv乱码怎样处理的细致内容,更多请关注ki4网别的相干文章!