文字コード」タグアーカイブ

『ソ』Shift-jisでformの文字化け

shift-jisでform作成して、即MySQLとかDBに入れようとすると、文字化けたまま登録ささる。

文字化けの仕組み

何故文字化けが起きるかっていうと、
PHPでマルチバイト文字の誤認識をしてるからなのね。

PHPは親切にもformで送るとき、「"」「'」「\」みたいなんを、エスケープ文字『\』つけて「\"」「\'」「\\」として送ってくれる。
で、受取ったら今度は「"」「'」「\」に戻すために、『\』を自動的に消してくれる。

消してくれるのはいいんだけど、残念ながら通常的にはshift-jisの『マルチバイト』を考えてなかったのだ。
続きを読む

『ソ』Shift-jis

通常phpで↓なんて書くとエラーになる。

$str = mb_ereg_replace ("ソ\","ソ", $str);

『\』はエスケープ文字だから、当然なんだけど、『ソ\』を使わなくてはいけないこともあるのだ。

何故『ソ\』かっていうと
Shift-JISでformから送られてくると『ソ』が情報不足で『ソ\』にせんとイカン。
※どうしてかの説明はコチラ
続きを読む

phpMyAdminで文字コードを変更

携帯サイトを作るにあたり、大体無難にSJISを使う。
正しくはSJIS-WINというものなのだが。
だからDBもSJIS。

MySQL4.X・phpMyadmin4.X系はSJIS管理がしやすくなってるが、
今更このバージョンはないかなぁと思うが、
MySQL5からはphpMyAdminのデフォルトver5.X系だから、UTF-8がデフォルト。
形も変わってるしで管理しづらくなっちゃうのね。

でもテスト環境作るのに、わざわざバージョンダウンしたくないし、
環境設定も変えたくない の 対応策。

解決策

mySQLにログインして

show variables like "char%";

で文字コードを確認したら明らかだったので、my.cnfを変更。
MySQLのcharsetをutf8に変更する方法
※my.cnfがない場合があるが、なければ作って大丈夫。
つまるとこphpMyadminの文字化け対応だね。

SET NAMES cp932;

とテーブルの文字コードの変更を忘れずに!
続きを読む

UTF-8とUTF-8N

windowsのデフォルトはshift-jisなものだから、すぐファイルをshift-jisにする。

本来utf8で作成しなくてはいけないところ、何となくファイル作成・保存したら、大概shift-jis。
そこで単純にutf-8に変換保存すると、なーんかゴミが入っているという場合がある。

そういう場合、shift-jisで見直すと『・ソ』とか入っている。
utf-8のテキスト状態では見えないゴミ『BOM』である。
続きを読む