[PHP-users 14262] Re: getでの文字コード対策

Kouda @ Office PERSON php-users@php.gr.jp
2003年 3月 25日 (火) 05:25:17 JST


> 大場です。
> 
> #質問時に使ってるOS、そのバージョン、PHPのバージョン
> #データベースとそのバージョンを書くのは必須くらいに
> #思って欲しい…

すみません。うっかりしていました。

PHP 4.2.2
対策なしでも正常動作したのがNetscape 7.02
URLに全角文字が乗った途端文字化けしたのがIE 6.0.2
参考にまで、OS Windows2000(SP3)、DB PostgreSQL(バージョン不明)

> 何をどう試したのか書かれないと、あなたがしたことの
> どこがおかしいのか、誰もわかりませんけど?

あちこちのサイトをのぞいたところ、NetscapeとIEではURLの文字コードが
異なるらしい、と理解しました。
従って、URLに続けて&で変数値を渡してやると、IEの場合全角文字が化け
てしまうというのが原因だとわかりました。

で、ポップアップウィンドウとして呼び出したURL側で、受け取った文字列
の正体がわかりません。
どちらもmetaタグでEUC-JPを指定しており、また、親ウィンドウ、ポップ
アップ両方で、

 i18n_http_input("EUC-JP");
 i18n_http_output("EUC-JP");

と設定しています。
受け取った値の文字コードを i18n_discover_encoding でチェックすると、
ASCII と表示されるため、初心者としては頭を抱え込んでしまいます。
受け側(ポップアップウィンドウ fncGetAdr.php)で、

 $txtAddress1 = mb_convert_encoding($txtAddress1, "EUC-JP","AUTO");

としてみたり、悪あがきで、

 $txtAddress1 = urldecode($txtAddress1);

と上記の前に加えてみたり、逆に親ウィンドウ側Java Scriptで、

 escape(document.frmBranch.txtAddress1.value)

と記述し、復元を試みました。マニュアル等を見ながら、上記のような記述
を組み合わせて(例えばAutoをUTF-8に変更したり)みたのですが、結果は
全敗です。

> コンパイル時のマルチバイト回りの設定がどうなっていて
> インストール後のphp.iniのマルチバイト回りの設定がどうなっていて

すみません。これ意味がよくわかりません。

'--enable-mbstring' '--enable-mbregex' '--enable-mbstr-enc-trans'

これのことでしょうか。


--
from Kouda@Office PERSON



PHP-users メーリングリストの案内