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

PHPでの空白削除に関して

PHPで空白を削除する方法についてメモします。 trimについて 空白を削除する関数といえばtrimが何といっても一番有名でしょう。

no image

PHPのPDFライブラリに関して。

今月PHPでPDFを出力する要件があったんで色々見てきましたので、まとめを。 昨年もちょっとやりましたが、色々と面倒です。 fpdfはかなり古くダメダメっぽいですね。昨年はじめにPDFを使う要件があっ …

no image

composerに関して

Javaではライブラリをpomで管理し、mavenを使うことで一括管理していました。 PHPではcomposerがその役割を担っています。 Contents1 composer公式ドキュメント2 co …

no image

cakePHPでのCSVダウンロード

cakePHPにてCSVのダウンロードなんぞを。 以前このエントリーでCSVダウンロードに関しては取り扱ったのですが、 ボタンを押す ファイルダイアログが開く パスを選ぶ 意図したデータを正常にダウン …

no image

PHPでのコンソール入力に関して

PHPはほとんどの場合、ブラウザでURLをたたいてWEBサーバーから呼び出されるパターンがほとんどです。 ところが、コンソールから使いたい場合などもあるでしょう。 コンソールから入力する場合、なんらか …