skillup

技術ブログ

PHP

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

投稿日:

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

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

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

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

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

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

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

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

http://www.kent-web.com/pubc/garble.html

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

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

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

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

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

http://php-archive.net/php/csv-tsv-array/

 

 

-PHP
-,

執筆者:


comment

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

関連記事

no image

Laravel5.4インストール&ルーティング

来月からの仕事でLaravel5.4を使うことになったのでテストがてら自宅で勉強。 とりあえず下記リンクが参考になりました。 Laravel5.4でシンプルなCMSを作るチュートリアル 初めてのLar …

no image

cakeでのトランザクション、コミット、ロールバック

cakePHP(2.X系)でのトランザクション、コミット、ロールバックについて。 cakePHPでトランザクションを書ける場合、Model内に [crayon-5ce4bfeb422934158833 …

no image

cakeでのUtilityメソッド

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

no image

ob_startを使ったバッファリング出力

先日var_dumpの結果をログに出力したいときに検索すると下記のようなコードを書けばよいということがわかりました。

ob_start …

no image

cakePHP小ネタ集(Authの複数認証)

最近よく触っているcakePHPの小ネタなど。 Contents1 Authコンポーネント 複数の認証2 自動のdivタグを出力しない3 Cakeでのプルダウン作成 Authコンポーネント 複数の認証 …