ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PHPチュートリアルでcsv形式ファイルから文字列を抽出する際の問題と解決策
PHP は fgetcsv() 関数を使用して csv 形式のデータを生成します。
次の文を使用してください
$hd=fopen('test.csv','r'); $buf=fgetcsv($hd,1000,',');は、test.csv 形式のファイルを開きます。ファイルの内容は「,」文字で区切られます。
最初に取り出された行は、ID、メッセージ、時刻などの自動的な意味を表します。
2行目から始めて、1、メッセージ、12:00などの特定のデータを表します。
リーリー
これはなぜですか?
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" を比較すると、最終的に等しいことがわかります。