[PHP-users 15125]Re: 文字化け
yoshitaka otsuki
yotsuki @ ldn.co.jp
2003年 5月 8日 (木) 17:31:42 JST
よしたか です。
返事が遅くなり申し訳ありません。
草薙様へ
>この現象は、Shift_JISの2バイト目が0x5C(\)であるこれらの文字で同様の現象
>が発生するかと思います。
>―ソЫ噂浬欺圭構蚕十申曾箪貼能表暴予禄
>兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭
確認したところ、ご指摘の通り上記文字でも発生しました。
>途中に入れても \ が付加されないと言うのはよく判りませんが、文字列に \ が
>挿入されたという現象の確認はどの時点で行われていますか?
>スクリプト中で変数の値を出力した場合と、テーブルに挿入された結果を取得さ
>れて確認した場合とでは、その値が違ってくるかと思います。
>とりあえずmagic_quotes_gpc をキーワードに調査されると解決に近づくかも
>しれません。
確認のタイミングとしては、画面からPOSTで受け取ったの入力データを使用し、
POSTGRES DB へ更新を行っていました。その際にご指摘の文字が最後尾にあると、
直前コード0x5C(\)で区切り文字(')が打ち消されてしまうらしく、文法エラーと
なってしまいます。
文字列の途中では平気というのは、あるフィールドに「表裏」と入れると正常に
更新されるのですが「表」と入れるとNGとなってしまいます。これは「表裏」と
入れた場合、0x5C(\)の後ろに来る文字が2バイトコードなので平気なのでしょうか?
久保田様へ
>php.iniのmagic_quotesまわりの設定や
>postでデータを受けとってからの処理、
>DBへ納める時の処理などが書かれていないのでよくわかりませんが、
>あきらかに余分にエスケープがかかっているせいだと思います。
>postされてきた文字列をstripslashes()してみたらどうなりますか?
php.iniのmagic_quotesまわりの設定は、
magic_quotes_gpc On
magic_quotes_runtime Off
magic_quotes_sybase Off
となっています。
ご指摘の通り、stripslashes()を使用したところ、余分にエスケープは
かからなくなりましたが、逆に半角の \ も使用できなくなってしまいました。
\\ と入力すれば問題ないのですが、他にいい方法がありますでしょうか?
文章が整いませんが、ご指摘を宜しくお願いします。
PHP-users メーリングリストの案内