PHP5 fgetcsv 日本語文字が消える場合


PHP5 fgetcsv 日本語文字が消える場合

2019/1/16 追記 現在は以下の記事を参照してください。

PHP「fgetcsvはsetlocaleしないと日本語が読めない」は迷信なのか?


PHP5 で fgetcsvを使ってマルチバイト文字列を読込む際に
日本語が消える、もしくは一部消える現象が起きるのでその対策。

fgetcsvの使い方はここに書いてあります。

fgetcsv — ファイルポインタから行を取得し、CSVフィールドを処理する

注意点

この関数はロケール設定を考慮します。もし LANG が例えば en_US.UTF-8 の場合、 ファイル中
の 1 バイトエンコーディングは間違って読み込まれます。

wonder on server sideにも書いてます。
csvファイルを読み込む

今回問題となった元のデータはこれ

9033,裏面その他(モノクロ),”9033,9034,9035,9036,9037,9038,9039,9040″,,サンプル画像は見本になります。<br />記載内容に合わせ、当方にてバランス良くレイアウトをさせていただきます。

今回問題となった箇所はここ

サンプル画像は見本になります。<br />記載内容に合わせ、当方にてバランス良くレイアウトをさせていただきます。

消えた状態

<br />記載内容に合わせ、当方にてバランス良くレイアウトをさせていただきます。

で、実際の対応方法は以下のページを参考にしました。

fgetcsv関数を文字化け対応 setlocaleの文字コード指定

 

setlocale(LC_ALL, 'ja_JP.UTF-8');

自分の場合は上記を追加することで直りました。
※ちなみにcsvファイルは一旦以下のようにして文字コードを変更しています。

$buf = mb_convert_encoding(file_get_contents($path, &amp;amp;quot;utf-8&amp;amp;quot;, &amp;amp;quot;SJIS-win&amp;amp;quot;);

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です