[PHP-dev 763]Re: zend-multibyteの挙動について
Seiji Masugata
s.masugata @ digicom.dnp.co.jp
2003年 5月 9日 (金) 12:41:06 JST
桝形です。
> パーザ側では、エンコーディングさえマッチングしていれば、
> それほど厳密に文字セットについてうるさく見る必要はないので、
> 原理的には実現可能です。
了解しました、少し安心しました。
もう一点、気になるところが、
declare( encoding="EUC_JP" );
の、扱いです。
これは残りますか?もしくは一本化すると同時になくなりますか?
これができる利点として、基本的に一つのphp.iniの設定で、
基本は、internal_encoding = EUC
例外的に、internal_encoding = SJIS( もしくは他の設定 )
という指定をプログラムから行えるようになります。
php.ini:
output_buffering = Off
output_handler =
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.encoding_translation = On
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.detect_order = SJIS-win,SJIS,EUCJP-win,EUC_JP,UTF-8,UTF-7,ISO-2022-JP,JIS,ASCII
mbstring.substitute_character = none;
mbstring.func_overload = 1
mbstring.script_encoding = SJIS
と基本は、internal_encodingがEUCが前提で、一部全てSJISにしたい
コンテンツに対して、
<?
declare( encoding="EUC-JP" );
mb_internal_encoding( "SJIS-win" );
mb_regex_encoding( "SJIS" );
header( "Content-type: text/html; charset=Shift_JIS" );
ob_start( "mb_output_handler" );
mb_http_output( "SJIS-win" );
// declare( encoding="EUC-JP" )としているが「SJIS」のエンコーディング
// でプログラムを記述する。
// また、出力するHTML等も「SJIS」のエンコーディングで記述する。
?>
とする事で、internal_encodingをSJISに変更する事ができ、後の
処理も、スクリプトはSJISで予め書いているので、問題なく動作
できています。
サーバ管理者から.htaccessはパフォーマンスに影響があるから駄目、
httpd.conf等に記述するのも駄目。。。サーバは他にも色々とある
ので、各サーバ個別にphp.iniの設定がばらばらだと管理が非常に
しずらいので、基本的にphp.iniのデフォルト設定は一つにしてくれ
という状況で、今のやり方で何とかしのいでいます。
一本化すると、こういうやり方をしなくて済む分、互換性の問題が
出てくると思います。
今まで、スクリプトSJIS、internal_encodingをEUCで正常動作して
いたのが、上手く動作しなくなった、DBに格納した文字が化ける
ようになった等々。。。
潔く、PHP5からは、こういう風に仕様を変更しました。。というのも
一つの案ですけど、一意見として捉えて頂ければ幸いです。
> これははずせません。この話をするのはかなりうんざり気味ですが、
> 政治的に無理です。
>
> # なんだろうなあ、オープンソースの政治って。
嫌な事を思い出させてしまい、すみません。(^^;
--
Seiji Masugata <s.masugata @ digicom.dnp.co.jp>
PHP-dev メーリングリストの案内