この記事について
| 環境 | さくらレンタルサーバー、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')
