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