[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 メーリングリストの案内