PHPの文字化け対策のまとめ
PHPの文字化け解消にはいくつもの方法があるが、忘れぽっいので、まとめておく。
(1).htaccessでphp.iniのエンコードを設定変更する
*便利だが、Apacheは、.htaccessを使用しないよう強く推奨している。
(注意:重要)
客先サイトの場合には、絶対にiniの設定変更しないこと。
文字化けが生ずれば、面倒でも、各ページのPHP先頭に
mb_language('Japanese');
mb_internal_encoding('SJIS、UTF-8他通常htmlページで使用するエンコード');
mb_http_output('SJIS同上');
をつければ解消する。これで個別対応すること。
@アップロード予定サーバーのmbstring.encoding_translationがONかどうか及びmbstring.http_output設定をphpinfo()関数で確認する。
Aサーバーでmbstring.http_output設定をhtaccessで変更できるかどうか以下のコードで確認する
Bhtaccessで変更できれば、htaccessファイルを作成してアップロードする。
*htaccess.txtにコードを書き込む(エンコードの表示方法に注意。phpinfoの表記)
*アップロード後に、属性を604に変更する
*ホスト側のみで、ファイル名を.htaccessに変更する
*ファイル名変更後は、.htaccessファイルは表示されなくなる。見たければ、 このページ参照
C重大注意
$_POST{"忘れるな"}は、mb_convert_encodingで、変更しておくこと。 このPHPブログの当初生じたiphoneでの文字化けは、これで収まった。(当初、メタタグにchartsetをわざといれていなかったことが原因かもしれいが・・・)
(2)file_get_contentsで他のURLの内容を取得する場合
単にmb_detect_encodingでそのURLのエンコード検出し、mb_convert_encodingでサーバーのデフォルトのエンコードへ変えれば文字化けしない。 (下のコードは、このページの「テキストのみ表示し、ページ内を検索」で実際に使用)