mb_check_encoding関数の機能を有効にさせるためには?(PHP)
目次
PHPをインストールした際に、文字エンコード(mb_check_encoding関数の使い方)について困っていたときのお話を1つ。
問題の内容
下記のコードでは、mb_check_encoding関数で文字エンコーディングをチェックしています。何かの文字をフォームに入力して「送信ボタン」を押すと、
- ‘encoding OK.’
- ‘encoding NG.’
いずれかの結果が返ってくるはずですが、どちらの結果も返ってきません。mb_check_encoding関数の機能を有効にさせて、結果を表示させるためにはどうすればよいでしょうか?
<html> <body> <form method="post" action="p14mbchk.php"> <input type="text" maxlength="40" name="val"> <input type="submit"></form><p> <?php //! mb_check_encoding関数で文字エンコーディングをチェックするサンプル if(!isset($_POST['val']) || $_POST['val'] == ''){ die('not submitted.'); } var_dump($_POST['val']); phpinfo(); if(mb_check_encoding($_POST['val'], 'UTF-8')){ echo 'encoding OK.'; } else{ echo 'encoding NG.'; } ?> </p> </body> </html>
問題の補足
ローカル開発環境は以下の通りです。
- Linux(CentOS6.0)
- Apache2.2
- PHP5.3
そのローカル開発環境に、インストールしたPHPを詳しく述べると次のとおり。
- php-cli-5.3.3-27.el6_5.i686
- php-pdo-5.3.3-27.el6_5.i686
- php-mbstring-5.3.3-27.el6_5.i686
- php-common-5.3.3-27.el6_5.i686
- php-5.3.3-27.el6_5.i686
- php-mysql-5.3.3-27.el6_5.i686
mbstrigに関してデフォルトのphp.iniを次のように変更しています。
- mbstring.language = Japanese (#コメントアウトを解除)
- mbstring.internal_encoding = UTF-8 (#mbstring関数のデフォルト文字コードをUTF-8に)
- mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII (#文字コードの自動判別の優先順位をつける)
解決方法
次の2つの作業を行うことで、解決することができました。
1.ファイルのヘッダータグに文字コードを指定する
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
head要素の中にmeta要素を埋め込み、meta要素で、文書の文字コードをUTF-8とします。
2.php.iniの設定
output_buffering = Off default_charset = “UTF-8″ mbstring.language = Japanese
php.iniの設定を行います。mb_check_encoding関数を動かすだけで良ければ、上記3行の変更で良いみたいです。
しかし、脆弱性の問題まで踏み込んで、文字コードの設定を行うならば、別途対策が必要な気がします。
〔参考サイト〕