お問い合わせフォームとかで、フォームに日本語や全角テキストを入力すると、うまくPOSTできずに消えてしまう事案が発生。
原因は、phpの文字コード設定にありました。
php.iniの設定を見る
既にphp.iniがサーバーによって用意されている場合は、php.iniを確認してみましょう。
php.iniの場所がわからないときは
現在読み込まれているphp.iniは、phpinfo()によって確認できます。
info.php等適当なphpファイルを作り、以下のようにコードを書きます
1 |
<?php phpinfo(); ?> |
書いたらファイルをFTPでサーバーにアップし、ファイルにアクセス。
すると、現在利用されているphpの情報が表示されます。これは使う機会が多いので覚えておきましょう
上の画像が、現在読み込まれているphp.iniです。
php.iniの場所がわかったら、FTPでphp.iniをダウンロードし、ファイルを開きます。
下記のような部分があったら修正しましょう
1 |
mbstring.internal_encoding = EUC-JP |
↓
1 |
mbstring.internal_encoding = UTF-8 |
修正したらアップし、フォームの動作を確認してください。
別のphp.iniがある場合
あれれ?サーバーが用意したphp.ini以外にも、ルートディレクトリなんかにもphp.iniがあるぞ?
という場合が稀にあります。たぶん、WordPressを使うにあたってサーバーのデフォルトのphp.iniじゃ話にならないので、誰かが新たに自前のphp.iniを追加したんでしょうね。また、サーバーによってはもとからここに置いてある場合もあります。いろいろ大人の事情があるんでしょう。
まずはその別php.iniを開いて中身を読んでみて、’mbstring.internal_encoding = UTF-8‘という内容が書かれているにも関わらずエラーが出る場合、なんらかの理由でこのphp.iniが読み込まれていない可能性が高いです。
前章で説明したphp.iniの場所探しで、この別php.iniが読み込まれていない場合、.htaccessを見てみてください。
下記のような表記があるでしょうか?あるかもしれませんし、ないかもしれません
1 |
setenv PHPRC /home/xxx.com/html/ |
このコードは、別php.iniを読み込むためのコードです。
ない場合は追加しましょう。php.iniが置いてある場所を絶対パスで指定します。
ある場合は、内容が間違っていないか確認します。
絶対パスがわからないときは
適当なphpファイルに下記コードを書き、アップしてアクセス。
1 |
<?php echo __FILE__; ?> |
WordPressを使っている場合は要注意
で、今回なんでこんなエラーが出たかというと、WordPressでパーマリンクを変更した際に.htaccessが上書きされ、php.ini読み込み部分のコードが消えてしまったのが原因です。
なかなかホラーですよね…
何かサイト全体、もしくはフォームに影響がありそうな変更があった場合はフォームの動作確認を必ずしましょう。特にコンバージョンに関わる部分にエラーが出るとやばいですからね。。
がんばれWordPressマン!