[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>