php.iniファイルのマルチバイト設定について②mbstring.internal_encoding

URLエンコード(urlencode関数)でエンコードしたものを、デコードしてもどうしても文字化けする。

色々調べた結果、「php.iniファイルが悪さをして」との記述からphp.iniファイルを見直す。

mbstring.internal_encoding

内部文字エンコーディングを設定するとのこと。
これをSHIFT-JISに変更したらとりあえず問題が解決した。

現在運営中のサイトはサイト自体はshift-jisで運営されている。
当然HTMLファイルもshift-jisで作成されている。

が、データベースはUTF-8で稼働している。

PHPプログラムもUTF-8で作成している。
なので入力時はSHIFT-JISからUTF-8へ、出力時はUTF-8からSHIFT-JISへいつもmb_convert_encodingしている。
なぜこのようになってしまったかは置いといて、
ということは内部文字エンコーディングを変更すると、
データベース書き込み時に変化が出そうだから変えるのはマズイのかな・・・
これはためしてない。
(今後はデータベースやPHPファイル、HTMLすべてUTF-8で統一したい…)

とりあえず、urlencodeする前にSIFT-JISにmb_convert_encodingして、
GETパラメータで受け取った後、再度UTF-8からSHIFT-JISにmb_convert_encodingしたら表示が文字化け解消。

参考
php.iniの文字コードの設定

コメントを残す