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

S3 commandPoolについて

S3のcommandPoolに関して。 S3にファイルをアップロード、ダウンロードするときに、1つ1つファイルをアップロード、ダウンロードすることが一般的かと思いますが、ファイル数が多くなるとなかなか …

no image

サービスプロバイダとは

Laravelをやっていて、次に分かり難かった概念、サービスプロバイダについて。 アプリケーション開発にはデータベース、ファイル操作、ログ操作など様々な操作があり、個別のビジネス処理以外で共通化できる …

no image

メールパーサー(mailparseとphp-mime-mail-parser)に関して

以前、POP3を使ったメール受信というエントリーでメールパーサーをインストールしたんですが、他のライブラリをインストールする機会があったんでメモ。 https://github.com/php-mim …

no image

composerでのライブラリ登録

今回はPHPのパッケージ管理ツールであるcomposerへのライブラリ登録を。 Contents1 ライブラリの作成2 packagistへの登録3 呼び出す側3.1 composer.json3.2 …

no image

PHPで配列の同一性(集合のチェック)

AとBという配列があり、A⊂B つまりは集合のような関係を確かめたいときに下記のようなメソッドを使います。  

アーカイブ