2008/10/06

phpでEUC検索時の文字化け

「mbstring.encoding_translation」がonの状態では、送信時に自動で内部エンコーディングに変換されているはずです。そして、「mbstring.http_input」が特に指定されていないため、1文字のような短い値だけでは文字コードが上手く検出できず、変換に失敗します。(検索ボタンをクリックした場合は「検索」という文字も送信されるため文字コードの検出に成功する)

「mbstring.encoding_translation」をfalseにしてしまって入力と出力のエンコードを自分でしてしまうのが確実。

設定を変更できないなら古典的方法ですがhiddenで十分な長さの文字を渡してやれば良い。

2008/10/02

EUCページにFLASHでEUCエンコーディングの文字表示

MySqlはEUC、PHPもEUCでまとめているのに
フラッシュはUTF-8とShift-Jisしか判別しないようで、、

MySqlに格納されてるデータを、EUCのページに
Flashで表示すると当然ながら日本語は文字化けする。

しかも表示するページはEUC。

DB(EUC-JP)=>FLASH(UTF-8,Shift-Jis)=>表示(EUC-JP)

UTF-8のデータをEUC-JPに変換
mb_convert_encoding($str , "EUC-JP", "UTF-8");

さてどうする
変数を代入している件にいれてみる
echo("".mb_convert_encoding(mysql_field_name($rs,$i),"EUC-JP")."");

2008/10/01

SJISからEUCへ変換

プログラムを組んでいると、ぶつかるのが文字コード。データベースとPHPを利用していると、データベースの文字コードとPHP書類のコードや出力する際のエンコードをすべて合わせていかないと文字化けします。日本語はEUC-JPが強いのですが、実際はshift-jisで書かれたものも多く、そこにフォームなどのcgiが絡んでいるとPHPでShift-Jis⇔EUCの変換を行う必要がある場面が多々あると思います。

こういう場合はこいつで解決。

mb_convert_variables("SJIS", "EUC-JP", $_POST);
mb_convert_variables("SJIS", "EUC-JP", $_GET);

↑これで$_POSTと$_GETの両方をEUCからSHIFT-JISに変換できます。

↓これはその逆

mb_convert_variables("EUC-JP", "SJIS", $_POST);
mb_convert_variables(
"EUC-JP", "SJIS", $_GET);
出力エンコードを変更する関数は以下の関数です。

mb_http_output('SJIS');
mb_internal_encoding('SJIS');

その他のサーバーの細かい設定には「ini_set()関数」を使用します。