php csvファイルの乱符号化問題の解決方法をエクスポートする

1470 ワード

phpエクスポートcsvファイル乱符号化問題解決方法この問題を言う前にまずCSVファイルとは何かを話しますか?Comma Separator Value(カンマ区切り値)も.MysqlからCSVにデータをエクスポートし、CSVからSqlServerにインポートするなど、データ変換によく使用される中間ファイルが存在します.LinuxでPHPスクリプトを使用してMysqlデータベースからテーブルのデータを条件にcsvにエクスポートし、utf-8コードを使用してCSVファイルをエクスポートし、開いた後の中国語は文字化けし(WindowsでのCSVファイルのデフォルトはMicrosoft Excelに関連)、Notepad++またはWordで開くのは正常で、レイアウトが乱れていない.原因:BOMの災い、マイクロソフトの災い.BOMって何?Byte Order Mark(ビットシーケンスタグ)も.Unicodeファイルを識別するために、MicrosoftはすべてのUnicodeファイルをZERO WIDTH NOBREAK SPACE文字で始まることを提案します.これは、ファイルで使用される符号化およびバイト順序(big-endianまたはlittle-endian)を識別するために、「フィーチャー」または「バイト順序タグ(byte-order mark,BOM)」として使用され、具体的な対応関係は以下の表を参照してください.
 
Bytes Encoding Form
00 00 FE FF
UTF-32, big-endian
FF FE 00 00
UTF-32, little-endian
FE FF
UTF-16, big-endian
FF FE
UTF-16, little-endian
EF BB BF
UTF-8
クラスUnixシステムではBOMは使用されていません.既存のASCIIファイルの構文規則を破壊するからです.実装コード
<?php
$str = " , , , ";
$fp = fopen("a.csv","a");
//         bom      
fwrite($fp,"\xEF\xBB\xBF");
//      php    
fwrite($fp,$str);
phperz.com
fclose($fp);
phperz.com
?>

注意:csvファイルを書くときにphpソースコードがutf-8であり、BOMがなく、何も出力されていないことを確認します.
BOMは実際にはうるさいですが、もしあなたのホームページ(*.htmlにBOMがあれば、IE 6では.xの下を開くと不思議な空行が見つかりますが、Firefoxの下にはありません.
 
ソース:http://www.i-felix.cn/blog/phpdao-chu-csvwen-jian-luan-ma-wen-ti-jie-jue-fang-fa-gai-si-de-wei-ruan