犬ターネット

PHPで内部エンコーディングと出力の文字コードをスクリプト中から変更したい

2015-01-22 php

昔のサイトだと内部エンコーディングが UTF-8、出力が SJIS とかあって、その場合は php.ini で以下みたいに設定してあげるとそのように出力できる。

default_charset Shift_JIS
output_handler mb_output_handler
mbstring.language Japanese
mbstring.internal_encoding UTF-8
mbstring.encoding_translation On
mbstring.http_output SJIS

で、最近だと特定ディレクトリ以下は出力も UTF-8 にしたいってケースが結構ある。その場合は .htaccess に

php_value default_charset UTF-8
php_value output_handler pass
php_value mbstring.language Japanese
php_value mbstring.internal_encoding UTF-8
php_value mbstring.encoding_translation Off
php_value mbstring.http_output pass

と書いてあげればいいんだけど、管理者権限なかったり他いろいろあって .htaccess が使えない場合が多い。そんなときはスクリプト先頭に以下を記述すればOK。

<?php
// http_output は PHP 5.6 から非奨励だから空文字に
ini_set( "default_charset", "UTF-8" );
ini_set( "mbstring.http_output", "" );

本来であれば output_handler も mbstring.encoding_translation も無効にしたいんだけど、http://php.net/manual/ja/ini.list.php を見るとどちらも PHP_INI_PERDIR となっているためスクリプトからは変更できないから諦める。


悲しみをギターにギャリリンコ

娘と2人生活