[PHP-users 363] Re: PHP4.0.6で一部文字変換を passしたい

KOYAMA Tetsuji php-users@php.gr.jp
Thu, 28 Jun 2001 19:14:54 +0900


  小山です。

At Thu, 28 Jun 2001 17:00:29 +0900,
SATO Mitsuo wrote:
> この echo $ibmmoji の時だけ文字変換を止める方法はないでしょうか?
> 
> 現状のスクリプトはPostgreSQLクライアントエンコードにSJISを指定
> しているので、文字化けするのはあたりまえですが、この指定を外しても
> mb_output_handler が想定していない文字コード(IBM拡張文字をPostgreSQL側
> でEUCの未使用コードに割り振ったもの)のため、文字化けしてしまいます。

  このやり方では output buffering で最後にまとめて一気に変換してしまう
ので、特定部分だけ変換しないようにというのは難しいでしょうね。

> #php.ini でoutput_handler = mb_output_handlerを設定すると
> #<?php phpinfo(); ?>でPHPとZENDのロゴが見えなくなりますね。

  これも理由は同様で PHP が出力する GIF イメージに対しても、
mb_output_handler による変換がかかってしまうので、結果壊れたデータになっ
てしまうということですね。

  php.ini で output_handler を設定するのを止めて良いなら、以下のような
方法が考えられます。

  output_buffering = Off
  ouput_hander =

の状態で

<?php
ob_start('mb_output_handler');

  [通常のコンテンツ]

ob_end_flush();
echo $ibmmoji;
ob_start('mb_output_handler');

  [コンテンツ続き]

?>

  要は特定部分だけ、output buffering を解除してあげればいいわけで。

おまけ:
  マニュアルの Multi-Byte String Functions の章が XLIII なのは何故なん
でしょう? 綴りを見て M - U - L なので mSQL functions の後あたりに来る
のが正しいような気がするのですが。はっ、ひょっとして、M(ulti) - B(yte) 
だから今の場所なのか。最初見つからなくてうろうろ探してしまいました。(^^;

-- 
	小山 哲志@ビート・クラフト
	koyama@beatcraft.com
	koyama@hoge.org