2009年12月20日

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

あさかわです。


> そもそも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 mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2009年12月20日 17:51
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/91544
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。