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

CakePHPのcomponent

CakePHPのComponentについて。 CakePHPでは各コントローラに共通の処理をComponentとしてモジュール化することができます。 わかりやすいところでいえば認証のAuth,Sess …

no image

php5.6のインストール+cake3でのbake

cake3を動かしたい場合、PHP5.4以上でないと動きません。 2016年1月現在、CentOS6でyumでPHPをインストールする場合、php5.3ですので、5.4以上を入れる場合、別のリポジトリ …

no image

call_user_funcについて

call_user_funcについて。 call_user_funcはメソッドを動的に呼ぶことができるメソッドの1つで、コールバック関数を使いたいときに使われます。JavaScriptでは比較的多いと …

no image

PHPでのPDF出力 テーブル

PDFで何かを出力する場合、ほとんどが納品書や請求書などの帳票でしょう。 これらもfpdfで出力することができます。 Contents1 ソース2 参考リンク ソース [crayon-60098bed …

no image

リクエストとレスポンスについて

Laravelでリクエストとレスポンスにはそれぞれ元からクラスが当てあられております。

上記のようなメソッドでリクエストパラメータ自体 …