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

Rui Hirokawa php-users@php.gr.jp
Thu, 28 Jun 2001 06:31:57 -0500


廣川です。

バイナリデータを出力する時や変換を中止したい場合は、文字エンコーディング
変換を無効とするために出力前に以下を指定して下さい。

mb_http_output('pass');


Shift_JISにする時は、

mb_http_output('SJIS');

です。



SATO> 佐藤@大和鑑定です。
SATO> 
SATO> Vine Linux 2.1.5+PostgreSQL 7.1.2 で PHP 4.0.6 を試しています。
SATO> PostgreSQL内にShift_JISのIBM拡張文字(はしご高等)を利用したデータが
SATO> 存在しており、そのデータを取り扱うのに苦労しています。
SATO> 
SATO> ・PHP 4.0.6 のconfigure
SATO> ./configure --with-apxs=/usr/local/apache/bin/apxs \
SATO>   --with-pgsql=/usr/local/pgsql --without-mysql \
SATO>   --enable-mbstr-enc-trans --enable-mbstring \
SATO>   --enable-versioning
SATO> 
SATO> ・php.ini の設定
SATO> [PHP-users 306]を参照して以下の5行を追加
SATO>   output_buffering = On
SATO>   output_handler = mb_output_handler
SATO>   mbstring.internal_encoding = EUC-JP
SATO>   mbstring.http_input = auto
SATO>   mbstring.http_output = SJIS
SATO> 
SATO> ・php のスクリプト(EUC-JPで記述)
SATO> <?php
SATO>   $dbconn = pg_connect("dbname=test");
SATO>   pg_set_client_encoding($dbconn,"SJIS");
SATO>   $sql = "select * from testtb";
SATO>   $rtn = pg_exec($dbconn, $sql);
SATO>   $ibmmoji = pg_result($rtn,0,"name");
SATO> ?>
SATO> <html>
SATO> <head>
SATO> <title>IBM拡張文字チェック</title>
SATO> </head>
SATO> <body>
SATO> 名前は、<?php echo $ibmmoji;?>です。
SATO> </body>
SATO> </html>
SATO> 
SATO> この echo $ibmmoji の時だけ文字変換を止める方法はないでしょうか?
SATO> 
SATO> 現状のスクリプトはPostgreSQLクライアントエンコードにSJISを指定
SATO> しているので、文字化けするのはあたりまえですが、この指定を外しても
SATO> mb_output_handler が想定していない文字コード(IBM拡張文字をPostgreSQL側
SATO> でEUCの未使用コードに割り振ったもの)のため、文字化けしてしまいます。
SATO> 
SATO> mb_encoding_off;echo $ibmmoji;mb_encoding_on;と出来れば嬉しいのですが。
SATO> 
SATO> 
SATO> #php.ini でoutput_handler = mb_output_handlerを設定すると
SATO> #<?php phpinfo(); ?>でPHPとZENDのロゴが見えなくなりますね。
SATO> 

-- 
Rui Hirokawa <louis@cityfujisawa.ne.jp>
                  <hirokawa@php.net>