[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絵文字 ()を発見したら、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 ---------- /
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~