PHP が CSV 形式ファイルから文字列を抽出する場合の問題と解決策
PHP は fgetcsv() 関数を使用して csv 形式でデータを抽出します。
次のステートメント
$hd=fopen('test.csv','r');$buf=fgetcsv($hd,1000,',');
取り出した最初の行は、ID、メッセージ、時刻などの自動的な意味を表します。
2 行目からは、1、メッセージ、12:00 など、特定のデータを示します。
if($buf[1]=="some messages") echo "yes";
これはなぜですか?
strlen() 関数を使用して、$buf[1] の長さを「メッセージ」と比較できます。
比較の結果は不等であることが判明しました。
なんと、どうしてそのような問題が起こるのでしょうか? 2 行目の $buf[1] から抽出された値は明らかに「message」ですが、なぜ長さが異なるのでしょうか?
これは、CSV 形式ファイルのエンコード方法に関係します。
この問題を解決するにはどうすればよいですか?
まず PHP の文字エンコード検出関数 mb_detect_encoding($buf[1],'UTF-8,EUC-CN,ASSII') を使用し、
抽出されたエンコード形式が「EUC -CN」の場合" その後、次のステートメントを使用して utf8 エンコード形式に変換します。
PHP の文字変換関数 mb_convert_encoding() を使用します。$res=mb_convert_encoding($buf[1],'UTF- 8','EUC- CN')。
変換結果 $res と文字列 "message" を比較すると、最終的に等しいことがわかります。