[PHP-dev 1447] Re: mbstring.internel_encoding の値が反映されない場合がある件(2)

KATOH Yasufumi karma @ jazz.email.ne.jp
2009年 3月 11日 (水) 21:22:47 JST


加藤泰文です.

もう少し調べて見ましたが,知識ナシ故に,進展ありません.(^_^;)

>>> On Mon, 02 Mar 2009 13:29:23 +0900
    in message   "[PHP-dev 1446] mbstring.internel_encoding の値が反映されない場合がある件(2)"
                  KATOH Yasufumi-san wrote:

> --- mbstring.c.orig	2009-03-02 13:02:25.000000000 +0900
> +++ mbstring.c	2009-03-02 13:03:03.000000000 +0900
> @@ -745,6 +745,7 @@
>  		 * 2. mbstring.language directive is processed in per-dir or runtime
>  		 * context and 3. call to the handler for mbstring.language is done
>  		 * after mbstring.internal_encoding is handled. */
> +		_php_mb_ini_mbstring_internal_encoding_set(new_value, new_value_length TSRMLS_CC);
>  		return SUCCESS;
>  	}
>  }

さすがに _php_mb_ini_mbstring_internal_encoding_set を使うのは目的外使
用みたいでマズい事が起こるのかもしれませんね.単純に
  MBSTRG(internal_encoding) = mbfl_name2no_encoding(new_value);
で良いのかも? (current_internal_encoding も?)

ところで,この部分のコメントがイマイチ良く分かりません.単に英語力がな
いだけかも? (^_^;)

| the corresponding mbstring globals needs to be set according to the
| ini value in the later stage because it never falls back to the
| default value if 1. no value for mbstring.internal_encoding is
| given, 2. mbstring.language directive is processed in per-dir or
| runtime context and 3. call to the handler for mbstring.language is
| done after mbstring.internal_encoding is handled.

1. mbstring.internal_encodings が no value
2. mbstring.language がディレクトリ単位もしくは実行時に設定される
3. mbstring.internal_encoding を処理した後に mbstring.language の処理
   が呼ばれる

の全てが当てはまるような場合に,もっと後に値をグローバル変数にセットす
る必要がある,ってことですよね? internal_encodings が設定されてないの
に,3 の「internal_encoding を処理した後」という部分が良く分かりませ
ん.どういう事でしょうか?

# 内部が分かってないのでボケてる可能性大ですが... (^_^;)

まあ,確かに後で PHP_RINIT_FUNCTION でグローバル変数にセットはされます
けど,encoding_translation が有効だと RINIT の前に変換の encoding が決
まってしまいますよね.

-----
と,ここまで調べて,ini_set した場合はどうなるかな,とやると,そもそも
ini_set だと OnUpdate_mbstring_internal_encoding には飛ばないので,グ
ローバル変数が ini_set で設定した値じゃないまま,mbstr_treat_data に行
きますね.この中で zend_ini_string とかしても,ini_set で設定する前の
値なので,更新されるのがもっとあと,ということですかね?

php-dev 1445 で PHP 5.2.6 では起きないと書きましたが,ini_set のケース
は 5.2.6 でも同じでうまく動かないですね.

-- 
==============================================
((((    加藤泰文
○-○                karma @ jazz.email.ne.jp
==============================================
 (Web Page) http://www.ne.jp/asahi/ka/to/
==============================================
ドキドキ...


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