phpでcsv形式のデータの場合は、fgetcsv()関数を使う必要があります。
次の文を使用してください
$hd=fopen('test.csv','r');
$buf=fgetcsv($hd,1000,',');
test.csv形式のファイルを開きます。ファイル内の内容は「,」文字で区切られています。
取り出した最初の行は、id、メッセージ、時刻などの自動的な意味を表します。
2行目からは、1、メッセージ、12:00など、具体的なデータを表します。
if($buf[1]=="いくつかのメッセージ") echo "はい";
2 行目以降、このステートメントの出力結果は 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" を比較すると、最終的に等しいことがわかります。