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

SATO Mitsuo php-users@php.gr.jp
Thu, 28 Jun 2001 17:00:29 +0900


佐藤@大和鑑定です。

Vine Linux 2.1.5+PostgreSQL 7.1.2 で PHP 4.0.6 を試しています。
PostgreSQL内にShift_JISのIBM拡張文字(はしご高等)を利用したデータが
存在しており、そのデータを取り扱うのに苦労しています。

・PHP 4.0.6 のconfigure
./configure --with-apxs=/usr/local/apache/bin/apxs \
  --with-pgsql=/usr/local/pgsql --without-mysql \
  --enable-mbstr-enc-trans --enable-mbstring \
  --enable-versioning

・php.ini の設定
[PHP-users 306]を参照して以下の5行を追加
  output_buffering = On
  output_handler = mb_output_handler
  mbstring.internal_encoding = EUC-JP
  mbstring.http_input = auto
  mbstring.http_output = SJIS

・php のスクリプト(EUC-JPで記述)
<?php
  $dbconn = pg_connect("dbname=test");
  pg_set_client_encoding($dbconn,"SJIS");
  $sql = "select * from testtb";
  $rtn = pg_exec($dbconn, $sql);
  $ibmmoji = pg_result($rtn,0,"name");
?>
<html>
<head>
<title>IBM拡張文字チェック</title>
</head>
<body>
名前は、<?php echo $ibmmoji;?>です。
</body>
</html>

この echo $ibmmoji の時だけ文字変換を止める方法はないでしょうか?

現状のスクリプトはPostgreSQLクライアントエンコードにSJISを指定
しているので、文字化けするのはあたりまえですが、この指定を外しても
mb_output_handler が想定していない文字コード(IBM拡張文字をPostgreSQL側
でEUCの未使用コードに割り振ったもの)のため、文字化けしてしまいます。

mb_encoding_off;echo $ibmmoji;mb_encoding_on;と出来れば嬉しいのですが。


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

大和不動産鑑定株式会社
情報システム部 佐藤 充男
satou@daiwakantei.co.jp
http://www.daiwakantei.co.jp/