CPIのサーバを使用した時にPOSTで渡されるデータが文字化けしてしまったので対処方法をメモします。
文字化けする原因はCPIサーバのPHPの文字コードがEUC-JPで設定されている為、UTF-8で制作している場合POSTの値が文字化けしてしまいます。
対処方法としてはphp.iniの設定を変更するか、POSTの値の文字コードを「mb_convert_encoding」で変換します。
■ php.iniの設定を変更
1.CPIのWEBコントロールパネルにログインします。
2.「お客様情報」→「プログラムのパスとサーバの情報」をクリックします。
3.「プログラムのパスとサーバの情報」画面の下部に「PHP iniの設定情報」があるので、指定のPHPのバージョンをクリックします。
4.「PHP iniの設定情報」画面が表示されるので、設定内容をコピーし、php.iniを作成します。
5.作成したphp.iniファイルの下記のようにを修正します。
・php.iniファイル修正前
mbstring.internal_encoding = EUC-JP
mbstring.encoding_translation = On
・php.iniファイル修正後
string.internal_encoding = utf-8
mbstring.encoding_translation = Off
6.修正したphp.iniファイルをサーバにアップロードします。
ドキュメントルートより前の階層にconfというディレクトリ作成しアップしました。
/usr/home/ユーザーID/conf/
7.「.htaccess」に下記の内容を設定しドキュメントルートにアップロードします。
「suPHP_ConfigPath /usr/home/ユーザーID/conf/」でphp.iniファイルの場所を指定します。
また、php.iniをブラウザからアクセスさせないように設定します。
・設定内容
AddHandler x-httpd-php536 .php
Options +FollowSymLinks
suPHP_ConfigPath /usr/home/ユーザーID/conf/
<Files ~ "\.ini">
deny from all
</Files>
・アップロードディレクトリ
/usr/home/ユーザーID/html/
8.アップロードが完了すれば、設定完了です。
phpinfo()で文字コードがutf-8に変更されていること確認できます。
■ mb_convert_encodingでPOSTの値を変換
POSTの値をループさせ、データをmb_convert_encodingでEUC-JPからUTF-8に変換します。
foreach ($_POST as $key => $value) {
$post[$key] = mb_convert_encoding($value, "UTF-8", "EUC-JP");
}
$postにUTF-8に変換したデータが格納されます。
データが少ない場合などは上記の方法でも対応できます。