html_entity_decodeで文字化けしたときの対処法(php.cgiのバージョン違い)

この記事について

環境さくらレンタルサーバー、PHP
目的同じサーバーの片方のドメインだけで起こるhtml_entity_decode直後の文字化けを直す
結果文字化けしない方のphp.cgiをコピーして解決

つまずきポイント要約

  • html_entity_decodeのデフォルト文字コードはphpのバージョンで異なる(5.4/5.5はUTF-8、それより前はISO-8859-1)
  • php.cgi方式ではphpのバージョンはコピーしたphp.cgiで決まる

事象

さくらにて、同じサーバーで異なるドメインを運用中、片一方のドメインだけで文字化けが発生した。文字化け発生箇所は html_entity_decode を実行した直後。

原因

原因はphpのバージョンの違いだった。
html_entity_decode のエンコードのデフォルト値はphpのバージョンで異なる。

PHP 5.6.0 以降では、デフォルト値として default_charset の値が使われる。PHP 5.4 と PHP 5.5 のデフォルト値は、 UTF-8 で、それより前のバージョンの PHP のデフォルト値は ISO-8859-1 である。

私のさくらサーバーはhtmlファイル内でphpを実行させるため、ルートファイルにphp.cgiをコピーしている。で、さくらのphpのバージョンはコピーしたphp.cgiで決まる。今回片一方のドメインのみで文字化けが起こったのはphp.cgiのバージョンが異なったためだった。

対処

文字化けなしのphp.cgiをコピーして問題は解決した。なお、html_entity_decode では encoding というオプションの引数で文字コードを変えることが可能である。

UTF-8なら、

html_entity_decode($str,ENT_NOQUOTES,'UTF-8')

関連記事

タイトルとURLをコピーしました