skillup

技術ブログ

PHP

Shift_JISの5C問題について 全角ハイフンでエスケープ

投稿日:2015年12月24日 更新日:

エンジニアであればだれもが頭を悩ませる文字コード。

私も初期のころはこれのせいでデータが入らないとかおかしくなるなんてことがさんざんありました。

今でも文字コードに遭遇することはあるんですが大体のパターンがわかり、基本的なものに関して困ることは少しずつ減ってきました。

が、本日は見たこともないような文字化けに遭遇。

CSVを取り込んで、データベースに突っ込む処理なんですが、全角ハイフンが入っているとCSVがずれてしまう障害が発生しました。

調べてみるとどうやらShift_JISの5c問題というタイプの文字化けのようです。全角ハイフンがそれに該当。

簡単に言うとマルチバイトの中に、エスケープと同じ文字コードが含まれていることがあり、コンピューターがこれをエスケープと解釈して表示がおかしくなるというケースのようです。

参考リンク  5C問題に関して 

Shift-JISの文字化け

今回のケースですが、”‐‐‐‐‐”,”test”というcsvがあり、この2つが区分けされずに同一になっているということが問題でした。

全角ハイフンの後半にエスケープと同様の文字コードが入っているせいで、”‐‐‐‐‐”,”test” の真ん中のカンマ(,)をエスケープしてしまい、1つのデータとみなしていたのです。(fgetcsvで取り込んでいました。)

対処法としては全角ハイフン自体に手を加える、UTF8で保存しなおす、エスケープ文字を\ではなく別のものを使うですね。

私の場合、エスケープ文字自体を\ではなく^にしました。ちょっとトリッキーな対処法だと思いますが、参考になる方がいれば幸いです。

一度別ファイルとして保存しなおす、なんて方法もあったりします。こっちのほうが正攻法かな・・・

[PHP]文字化けせずにCSVファイルを読み込み、配列に変換する

-PHP
-,

執筆者:


comment

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

関連記事

no image

cakeでのUtilityメソッド

cakeではControllerから呼ぶメソッドはComponent,ModelはBehavior、ViewはHelperに記述するのが一般的です。 ところが、プログラムを書いているとUtility系 …

no image

Laravelの認証(独自テーブル仕様)

Laravelで独自の認証をしたいときに少々大変だったのでメモなどを。 *ディフォルトのテーブルはuserで認証項目もemailとpasswordと決まっています。 いじるところが色々ありまして、列挙 …

no image

cakePHP Tips

cakeでの気づいたTipsなど。 知っているといろんな部分で開発が楽になります。 Contents1 作成日と更新日の自動設定2 scaffold3 新規登録と編集画面の作成4 htmlヘルパー5 …

no image

phpenv5.3+php-fpm

レガシーなプロジェクトではいまだにPHP5.3なんかを使うケースがあったりします。 これがCentOS6だったらyumでphp5.3とかだったらいいんですが、サーバーはCentOS7だったりするとなか …

no image

インメモリデータベース redis

インメモリデータベースのredis(レディース)について。 キャッシュとして以前はmemcachedを使っていましたが、いろいろ多機能ということでredisをちょっと触ってみようかと。 Content …