[PHP-users 15102]Re: PHPの文字コードについて

Seiji Masugata s.masugata @ digicom.dnp.co.jp
2003年 5月 7日 (水) 19:49:39 JST


桝形です。

> --enable-zend-multibyte付きでコンパイルはしていましたので、早速php.ini
> に追加して試してみました。
> 
> 結果は、今まで文字化けしていた個所は直ったのですが、以下のようにPrint
> 文でハードコーディングしている部分が文字化けするようになってしまいま
> した。
> 
> 例)print ("完了しました");

mbstring.script_encoding=auto

なので、自動変換が誤認識しているのかもしれません。
試しに、

mbstring.script_encoding=SJIS

としてみては、どうでしょうか?( スクリプトはSJISで記述 )
あるいは誤認識しないように、ファイルの先頭辺りに、おまじないを
いれるとか。

> また、マルチバイト関数mb_send_mailを使ったメール送信テストをしてみま
> したが、これは文字化けしてしまいます。internal_encodingがEUC-JPだか
> らでしょうか・・・。
> 
> 全てEUC-JPに変更すると問題ない状態になります。
> 
> php.iniでのマルチバイトに関する設定は以下のとおりです。
> -------------------------------------------
> mbstring.detect_order=auto
> mbstring.encoding_translation=Off
> mbstring.func_overload=0
> mbstring.http_input=auto
> mbstring.http_output=SJIS
> mbstring.internal_encoding=EUC-JP 
> mbstring.language=Japanese
> mbstring.script_encoding=auto
> -------------------------------------------
> 
> EUC-JPに統一したほうがよいのでしょうか・・・。

設定の順序が気になりますが。。。特にmbstring.languageの位置が。

> 参考
> --------------------------------------------------------------------
> インストールした時のphp.ini-distにはscript_encodingという項目はなく、
> phpinfo()でも項目として出力はされませんでした。ただ、手入力でphp.ini
> に「mbstring.script_encoding=auto」を設定すると、phpinfo()にも反映し
> ますが、一度反映すると消しても項目は削除されず"no value"として出力さ
> れます。
> --------------------------------------------------------------------

--enable-zend-multibyteが有効になっていて、設定がない場合は、項目は
あって"no value"と定義されるのが正しい動作なんですけど。。。これは
良く分かりません、すみません。。。キャッシュだったりして。

> Shift-JISで問題なく運用できてる方がいらっしゃいましたら設定項目等
> を教えていただけませんか?PHP4.3.1(CGI版)を利用しています。

ちなみに自分は、

mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
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

な、感じ( 順序はこれで )で作成してます。
デザインの部分の絡みでSJIS要望があまりに多かったので、SJIS固定
にしています。

理由があって、EUCで記述されたプログラムを起動したい場合は、

EUC.php( ファイルのコードはEUCで記述 ):

<?
declare( encoding="EUC_JP" );
echo "マルトバイト";
?>

てな感じでやっています。

この動作、かなりトリッキーなのですが、慣れると結構有効だったり
します。これを応用して、mbstring.internal_encodingを自由に変更
できたりするので。

--
Seiji Masugata <s.masugata @ digicom.dnp.co.jp>



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