[PHP-users 11442] 国際化版PHPでのSJIS処理

net0 php-users@php.gr.jp
Tue, 12 Nov 2002 15:17:00 +0900


播田と申します。

よく出る問題なのですが、いまいち良い方法が浮かばないので、、


VineLinux2.5で
藤本さんの
国際化版PHP
php-4.2.3-multibyte.tar.gz
を利用させて頂いております。
この国際化版で、IE&携帯対応のSJISでの処理を行いたいのですが、
方法を調べてみたところ

●「何もかもSJIS」
mbstring.internal_encoding    = Shift_JIS
mbstring.http_input           = auto
mbstring.http_output          = pass
mbstring.detect_order         = auto
mbstring.substitute_character = auto
mbstring.script_encoding      = Shift_JIS
かつ、Postgresの接続時に
$link=pg_pconnect(...);
pg_exec($link,"SET CLIENT_ENCODING TO 'SJIS';");
を行っています。

この状態での問題点として
\を含む日本語もクォートされてしまい、Postgres等のSQL文で
パースエラーになります。(magic_quotes_gpc=on)
変数を扱う前に日本語部分の\を除去すればいいとおもうのですが
日本語部分の\を除去するのが複雑で挫折しました。


●「スクリプトと出力はShift_JISだけど、データベースはEUC-JP」
mbstring.internal_encoding    = EUC-JP
mbstring.http_input           = auto
mbstring.http_output          = Shift_JIS
mbstring.detect_order         = auto
mbstring.substitute_character = auto
mbstring.script_encoding       = Shift_JIS
この時
<form enctype="multipart/form-data"
の場合、ファイル添付等以外の項目は
手動でSJISに変換してやる必要がある?
以前のVerで試した記憶だったんで、再度
4.2.3でmagic_quotes_gpc=on/offとあわせて
試してみたんですが、値がおかしい?
'ソ'=83 5c が
'ソ'=00 5c
で表示されてました。
※OS環境のせいかも。。。


SJIS出力でこれといった運用方法がありましたら、工夫を教えていただけると
助かります。



---
関係ないですが
http://snaps.php.net/
の
php4-STABLE-200211101739.tar.gz 
あたりを試したら
ext/mysql/libmysql/my_tempnam.c:103: the use of `tempnam' is dangerous, better use `mkstemp'
と出ますが、無視しておけば、そのうち修正はいるのかな?

-- 
net0@nifty.com