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

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

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

KATOH Yasufumi
加藤泰文です.

mbstring 使用時に internal_encoding を .htaccess で指定していた際 (か
つ,encoding_translation On の時) の問題と思われる現象に行き当たりまし
たので,少しデバッガで追ってみました.相変わらず,PHP 内部の構造とか作
法は素人ですので,ボケた事を言っていたらご容赦ください&長文ご容赦ください.

# あと,こんな設定せずに,ちゃんと設定したらええやん,というのはそうで
# すが,ここではそれは置いといてください.

 ./configure \
        --with-apxs2=/usr/local/apache2/bin/apxs \
        --with-zlib \
        --enable-mbstring \
        --enable-mbregex \
        --enable-zend-multibyte \
        --with-openssl
という風に構築した PHP 5.2.9 です (5.2.8 でも同様でした).5.2.6 以前は
起きていなかったようです.

php.ini は以下.
 mbstring.language = Japanese
 mbstring.internal_encoding = EUC-JP
 mbstring.http_input = auto
 mbstring.http_output = pass
 mbstring.encoding_translation = On
 mbstring.detect_order = auto
 mbstring.substitute_character = none;
 mbstring.func_overload = 0
 mbstring.strict_encoding = Off

ここで,とあるディレクトリには .htaccess を置き,
 php_value mbstring.language Japanese
 php_value output_handler mb_output_handler
 php_flag mbstring.encoding_translation 1
 php_flag magic_quotes_gpc 0
 php_value mbstring.internal_encoding UTF-8

という風に設定します.

とりあえずブラウザ上で再現させる方法を書きます.サンプルプログラムは以
下.ソースは UTF-8 で記述.

 <html>
 <body>
 <?php
 if($_REQUEST["message"] != ""){
     print "メッセージ<br>\n";
     print "encoding: " . mb_detect_encoding($_REQUEST["message"])  . "<br>\n";
     print htmlspecialchars($_REQUEST["message"]) . "<br>\n";
 }
 ?>
 <form action="test.php">
 <input type="text" name="message" value="<?php htmlspecialchars($_REQUEST["message"])?>">
 <input type="submit" value="送信">
 </form>

 <pre>
 <?php
 print_r(mb_get_info());
 echo phpversion();
 ?>
 <pre>
 </body>
 </html>

(再現その1)
1. まず上記ページにアクセスします.
2. ブラウザに表示させたまま,一度 apache を落とします.
3. httpd -X で apache を起動します.(かならず発現するようにシングルプ
   ロセスモード)
4. フォームに日本語を入力し,submit します.
5. 前画面で input に入力した文字列のみ文字化け.mb_detect_encoding は
   EUC-JP となります.mb_get_info で表示させた internal_encoding は
   UTF-8 で正常です.
6. この後は (http -X で起動している限りは) 何度アクセスしても文字化け
   は起こらず,正常です.

(再現その2)
1. (再現その1) の 6 でその後は何度アクセスしても正常と書きましたが,こ
   こで一度,.htaccess のないディレクトリへ遷移して,その後,この
   .htaccess の存在するディレクトリへ戻ります.つまり
   .htaccess 有 -> 無 -> 有 と一度外に出て戻ります.
2. 戻る際は http://server/dir/test.php?message=あいうえお みたいに直接
   パラメータ指定します.
3. 文字化け.mb_detect_encoding は EUC-JP,mb_get_info は UTF-8.

つまり internal_encoding に関しては,
- Apache 起動直後の (Apache 各プロセスの) 最初のアクセスでは .htaccess
  の内容は反映されない.
- 起動直後でなくても,一度 .htaccess のないディレクトリへ遷移して,ま
  た戻ると .htaccess の内容は反映されない.
という現象です.

長文ですので,あとは別便で.

--
==============================================
((((    加藤泰文
○-○                karma @ jazz.email.ne.jp
==============================================
 (Web Page) http://www.ne.jp/asahi/ka/to/
==============================================
_______________________________________________
PHP-dev mailing list
[hidden email]
http://ml.php.gr.jp/mailman/listinfo/php-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

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

Yasuo Ohgaki
大垣です。

この件、小泉さんが詳しいはずです。記憶で書いているので間違っている
可能性があるので予めご了解ください。 php.ini設定のコードは結構アバウト
に出来ていて、あっちを立てたらこっちが立たず、のようなコードになって
いたと思います。

ホスティングなどの場合、.htaccess による設定に頼る事になるので期待ど
おり動作しないと困りますよね....

時間があればコードを見て確認したいのですが、残念ながらいっぱいいっぱいで....

# と、小泉さんがメールに気付くかも知れないので返信してみました。

--
Yasuo Ohgaki

2009/03/02 13:27 KATOH Yasufumi <[hidden email]>:

> 加藤泰文です.
>
> mbstring 使用時に internal_encoding を .htaccess で指定していた際 (か
> つ,encoding_translation On の時) の問題と思われる現象に行き当たりまし
> たので,少しデバッガで追ってみました.相変わらず,PHP 内部の構造とか作
> 法は素人ですので,ボケた事を言っていたらご容赦ください&長文ご容赦ください.
>
> # あと,こんな設定せずに,ちゃんと設定したらええやん,というのはそうで
> # すが,ここではそれは置いといてください.
>
> ./configure \
>        --with-apxs2=/usr/local/apache2/bin/apxs \
>        --with-zlib \
>        --enable-mbstring \
>        --enable-mbregex \
>        --enable-zend-multibyte \
>        --with-openssl
> という風に構築した PHP 5.2.9 です (5.2.8 でも同様でした).5.2.6 以前は
> 起きていなかったようです.
>
> php.ini は以下.
>  mbstring.language = Japanese
>  mbstring.internal_encoding = EUC-JP
>  mbstring.http_input = auto
>  mbstring.http_output = pass
>  mbstring.encoding_translation = On
>  mbstring.detect_order = auto
>  mbstring.substitute_character = none;
>  mbstring.func_overload = 0
>  mbstring.strict_encoding = Off
>
> ここで,とあるディレクトリには .htaccess を置き,
> php_value mbstring.language Japanese
> php_value output_handler mb_output_handler
> php_flag mbstring.encoding_translation 1
> php_flag magic_quotes_gpc 0
> php_value mbstring.internal_encoding UTF-8
>
> という風に設定します.
>
> とりあえずブラウザ上で再現させる方法を書きます.サンプルプログラムは以
> 下.ソースは UTF-8 で記述.
>
>  <html>
>  <body>
>  <?php
>  if($_REQUEST["message"] != ""){
>     print "メッセージ<br>\n";
>     print "encoding: " . mb_detect_encoding($_REQUEST["message"])  . "<br>\n";
>     print htmlspecialchars($_REQUEST["message"]) . "<br>\n";
>  }
>  ?>
>  <form action="test.php">
>  <input type="text" name="message" value="<?php htmlspecialchars($_REQUEST["message"])?>">
>  <input type="submit" value="送信">
>  </form>
>
>  <pre>
>  <?php
>  print_r(mb_get_info());
>  echo phpversion();
>  ?>
>  <pre>
>  </body>
>  </html>
>
> (再現その1)
> 1. まず上記ページにアクセスします.
> 2. ブラウザに表示させたまま,一度 apache を落とします.
> 3. httpd -X で apache を起動します.(かならず発現するようにシングルプ
>   ロセスモード)
> 4. フォームに日本語を入力し,submit します.
> 5. 前画面で input に入力した文字列のみ文字化け.mb_detect_encoding は
>   EUC-JP となります.mb_get_info で表示させた internal_encoding は
>   UTF-8 で正常です.
> 6. この後は (http -X で起動している限りは) 何度アクセスしても文字化け
>   は起こらず,正常です.
>
> (再現その2)
> 1. (再現その1) の 6 でその後は何度アクセスしても正常と書きましたが,こ
>   こで一度,.htaccess のないディレクトリへ遷移して,その後,この
>   .htaccess の存在するディレクトリへ戻ります.つまり
>   .htaccess 有 -> 無 -> 有 と一度外に出て戻ります.
> 2. 戻る際は http://server/dir/test.php?message=あいうえお みたいに直接
>   パラメータ指定します.
> 3. 文字化け.mb_detect_encoding は EUC-JP,mb_get_info は UTF-8.
>
> つまり internal_encoding に関しては,
> - Apache 起動直後の (Apache 各プロセスの) 最初のアクセスでは .htaccess
>  の内容は反映されない.
> - 起動直後でなくても,一度 .htaccess のないディレクトリへ遷移して,ま
>  た戻ると .htaccess の内容は反映されない.
> という現象です.
>
> 長文ですので,あとは別便で.
>
> --
> ==============================================
> ((((    加藤泰文
> ○-○                karma @ jazz.email.ne.jp
> ==============================================
>  (Web Page) http://www.ne.jp/asahi/ka/to/
> ==============================================
> _______________________________________________
> PHP-dev mailing list
> [hidden email]
> http://ml.php.gr.jp/mailman/listinfo/php-dev
>
_______________________________________________
PHP-dev mailing list
[hidden email]
http://ml.php.gr.jp/mailman/listinfo/php-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

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

KATOH Yasufumi
加藤泰文です.

>>> On Fri, 29 May 2009 15:54:08 +0900
    in message   "[PHP-dev 1486] Re: mbstring.internel_encoding の値が反映されない場合がある件(1)"
                  Yasuo Ohgaki-san wrote:

> この件、小泉さんが詳しいはずです。記憶で書いているので間違っている
> 可能性があるので予めご了解ください。 php.ini設定のコードは結構アバウト
> に出来ていて、あっちを立てたらこっちが立たず、のようなコードになって
> いたと思います。
    : (略)
> # と、小泉さんがメールに気付くかも知れないので返信してみました。

大垣さんありがとうございます.

[php-dev 01453] で小泉さんがパッチを作ってくださっていますね.リポジト
リにも反映済みとのお話でした.

--
==============================================
((((    加藤泰文
○-○                karma @ jazz.email.ne.jp
==============================================
 (Web Page) http://www.ne.jp/asahi/ka/to/
==============================================
_______________________________________________
PHP-dev mailing list
[hidden email]
http://ml.php.gr.jp/mailman/listinfo/php-dev
Loading...