[PHP-users 34889] Re: 漢字「予」の後ろに¥文字

浅川 倫之 tom @ asakawa.ne.jp
2009年 12月 20日 (日) 17:51:23 JST


あさかわです。


> そもそもShift_JISを使っていることに問題があるのでしょうが、Shift_JISを採用する
> 顧客はなくならないでしょう。

Shift_JISで、ソースを書く場合のphp.iniには

output_handler = mb_output_handler
mbstring.language = Japanese
mbstring.encoding_translation = On

を設定して。

さらに
mbstring.script_encoding = SJIS-WIN
もしくは
mbstring.script_encoding = SJIS
が、必須です。

その他の設定項目は、任意ですが。

mbstring.internal_encoding = SJIS-WIN
mbstring.internal_encoding = SJIS

は、設定しない方がいいです。

UNIX系の文字列処理は、一般的にに、5ch(バックスラッシュ)を、エスケープ文字として使用します。
PHPもその様につくられています。
ですから、5chを、5chとして、使用するには、5chをさらに5chで、エスケープしないとなりません。
やっかいなことに、Shift-JISは、2バイト目に、5chが来る文字が存在します。(1バイト目にはこない)
これらの文字を使用する場合、その文字の次の文字に対するエスケープとして機能してしまうので
5chを2バイト目に持つ文字の場合は、5chを挿入する必要があります。
これを、mbstring.script_encoding = SJIS or SJIS-WIN です。
これで、PHPの、言語的には、問題なく動作しますので
mbstring.internal_encoding = SJIS or SJIS-WINでも良いのですが
内部的に、5chが挿入された状態になるので、プログラミング上の、文字列処理で不都合を生じますから
SJIS-WIN以外のエンコーディングにする必要があります。この場合、平和なのは、EUCです。


上記の意味がわからくても

output_handler = mb_output_handler
mbstring.language = Japanese
mbstring.encoding_translation = On
mbstring.script_encoding = SJIS-WIN
mbstring.internal_encoding = EUCJP-WIN
mbstring.http_output = SJIS-WIN
mbstring.http_input = SJIS-WIN

もしくは。

output_handler = mb_output_handler
mbstring.language = Japanese
mbstring.encoding_translation = On
mbstring.script_encoding = SJIS
mbstring.internal_encoding = EUCJP
mbstring.http_output = SJIS
mbstring.http_input = SJIS

のどちらかでOKです。






PHP-users メーリングリストの案内