ホームページ > バックエンド開発 > PHPチュートリアル > PHPがCSV形式ファイルから文字列を抽出する際の問題と解決策

PHPがCSV形式ファイルから文字列を抽出する際の問題と解決策

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-13 11:56:00
オリジナル
914 人が閲覧しました

PHP が CSV 形式ファイルから文字列を抽出する場合の問題と解決策

PHP は fgetcsv() 関数を使用して csv 形式でデータを抽出します。

次のステートメント

$hd=fopen('test.csv','r');$buf=fgetcsv($hd,1000,',');
ログイン後にコピー
を使用して、test.csv 形式のファイルを開きます。ファイル内のコンテンツは「,」で区切られます。

取り出した最初の行は、ID、メッセージ、時刻などの自動的な意味を表します。

2 行目からは、1、メッセージ、12:00 など、特定のデータを示します。

if($buf[1]=="some messages") echo "yes";
ログイン後にコピー


論理的に言えば、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" を比較すると、最終的に等しいことがわかります。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート