[PHP-users 7644] mb_output_handler のユーザー定義関数について

Akio Torikoshi php-users@php.gr.jp
Wed, 22 May 2002 18:23:06 +0900


 みなさん、初めまして、鳥越@シーズと申します。

 どうしても分からない部分があって質問させていただきます。


 内部エンコーディングEUC の php4.2.1 において、PCのブラウザにi-modeの絵
文字を表示させようとしています。(つまり、  のようなエンティティ
ではなく、SJISの生のバイトコードを出力したい)

 そこでHTTPの出力部分で、mb_output_handler を指定して、
さらに、そこにユーザー定義関数を使って、フィルタ処理を行わせようとしまし
た。

 しかし、なぜかユーザー定義関数の中で、文字列置換関数が正常に働かず、
ページがなにも表示されなかったりする不具合が生じています。

 置換関数を使わずに、

 return $str . pack('H*',dechex('63714') ) ;

 などとすると、正常に画面末尾に絵文字が表示されます。

http://search.net-newbie.com/php/function.ob-start.html

 などを拝見すると、ereg_replaceを使ったフィルタ処理の使用方法が書かれて
いるのですが、これと同じことをしても、やはり動きません。

 どなたか、ヒントをいただけると助かります。
 どうぞよろしくお願いいたします。




 php.ini の設定は以下の通り、です。(※関連部分だけ抜粋)

-------------------------------------
output_buffering = On

;output_handler = mb_output_handler
output_handler = my_output_handler	# <-- ユーザー定義関数

magic_quotes_runtime = Off
magic_quotes_sybase = Off

default_mimetype = "text/html"
default_charset = Shift_JIS

[mbstring]
mbstring.internal_encoding = EUC-JP
;mbstring.internal_encoding = SJIS
mbstring.http_input = SJIS
mbstring.http_output = SJIS
;mbstring.detect_order = auto
;mbstring.substitute_character = none;
mbstring.substitute_character =
;mbregex.encoding=EUC-JP
----------------------------------------


 ユーザー定義関数は以下の通りです。

------------------------------------------
function my_output_handler( $str )
{
	$str = mb_convert_encoding($str, "SJIS") ;

	# PCの時、i-mode絵文字 (&#63714;)を発見したら、SJISバイトコードに変換
	#---------------------------------------------------------
	if( AGENT_NAME == 'pc' )
	{
		$str = preg_replace( '/&#(\d{5});/e'
				, "pack('H*',dechex('$1'))"
				, $str ) ;
	}

	return $str ;
}






 _ _ _ _ _ _ _ _ _ _ _ _ _    ____________________________________
|1|2|3|4|5|6|7|8|9|0|-|^|\|  / --- Programmer  Akio Torikoshi --- /
 |Q|W|E|R|T|Y|U|I|O|P|@|[|  / --- Email: torikoshi@seeds.co.jp - /
  |A|S|D|F|G|H|J|K|L|;|:|  / --- http://www.seeds.co.jp/  ----- /
   |Z|X|C|V|B|N|M|,|.|/|  / --- Phone: 03-5815-7360 ---------- /
    ~ ~ ~ ~ ~ ~ ~ ~ ~ ~   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~