[PHP-users 20179]Re: いくつの文字が化けてしまいます

Y.Watanabe yuw @ msj.biglobe.ne.jp
2004年 2月 2日 (月) 10:47:06 JST


渡辺です。

この件は日本語や中国語のようなマルチバイト文字を使う上で、ほぼFAQですね。

"hanssak" wrote on 2004/02/02 09:54
with Subject: [PHP-users 20175] いくつの文字が化けてしまいます

>外国開発者なので言葉遣いが下手でも勘弁して頂きたいと思います。
>OS : RedHat9
>Apache : 2.0.47
>PHP : 4.3.3

>以上の環境でWebPageを開発していますが
>いくつの文字(‘十’、‘圭’など)もPost,Get方式ですると
>文字化けなってしまいます。
>
>‘十圭’ −> ‘十/圭/’
>
>このように余計な‘/’が入ってしまいます。


/(スラッシュ)ではなく \ (エンマーク=バックスラッシュ)では?


>マルチバイトについては良く分からないですが
>
>output_buffering     = On
>output_handler       = mb_output_handler
>default_charset      = Shift_JIS
>mbstring.language = Japanese
>mbstring.http_input  = auto 
>mbstring.http_output = SJIS    
>mbstring.internal_encoding = EUC-JP    
>mbstring.substitute_character = none
>このようにしました。

>それから全てのCharsetはShift_JISです。

「全ての」というのが何と何なのか不明なのですが、
PHPスクリプトにマルチバイト文字が埋め込んであるとして
もしもそのスクリプト自体がSHIFT_JISだったりすると
たぶんまずいです。だって、

>mbstring.internal_encoding = EUC-JP    
に設定されているのにスクリプトが
Shift_JISで書いてあるというのは矛盾だからです。

ファイルの文字コードを変換するソフトを通して
PHPスクリプトファイルの文字コードをEUCにするか、
文字コードを「EUC」とはっきり指定して保存できるようなエディタを
使用することをおすすめします。

マルチバイト文字の中でも特に
日本語はEUC、SHIFT_JIS、ISO-2022-JP(JIS)の三つが入り乱れて使われています。
日本人でもたまに混乱するくらいですから
外国の人にとってはなおさらややこしいでしょう。


PHPスクリプトがファイルがEUC-JPで書くようにしたうえで、
ひとまず、マニュアル↓に例がありますから、
http://jp.php.net/manual/ja/ref.mbstring.php
php.iniの内容をこれにあわせてみてはいかがでしょう?

------------------------------------
例 2. EUC-JP ユーザ用のphp.iniの設定
------------------------------------
;; 出力バッファリングを無効にする
output_buffering      = Off
;; HTTP charsetヘッダを設定
default_charset       = EUC-JP    
;; デフォルトの言語を日本語にする
mbstring.language = Japanese
;; HTTP 入力変換を有効にする
mbstring.encoding_translation = On
;; HTTP 入力エンコーディング変換をautoに設定
mbstring.http_input   = auto 
;; HTTP出力をEUC-JPに設定
mbstring.http_output  = EUC-JP    
;; 内部エンコーディングをEUC-JPに設定
mbstring.internal_encoding = EUC-JP    
;; 無効な文字を出力しない
mbstring.substitute_character = none
------------------------------------
 



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