[PHP-users 11396] Re: GETメソッドで半角アルファベットが文字化け

Shinich Moritani php-users@php.gr.jp
Sat, 09 Nov 2002 14:20:18 +0900


森谷です。

織田さん、近藤さん、岸田さんありがとうございます。

> %cb は、ASCII 文字列の '%cb' ではなく、urlencode
> された 16進数だということはご存じですね。2バイト
> 漢字コードの1バイト目だけ送ったので、$_GET に
> 自動的に urldecode するときに化けるのは当然です。
>
> 本当に ASCII 文字列の  %cb  を送りたいならば、
> urlencode します。

織田さんのを読んで気づきましたが、最初は

送信側スクリプト
<?
$var ="%cb";
$var = urlencode($var);
echo "<a href=test1.php?var=$var>var</a>";
?>

表示結果
QUERY_STRING:var=%cb
GET['var']:ヒ
(織田さんの仰るとおり半角(1byte)の"ヒ"です。
Becky君が自動的に変換しちゃったようです。)
となることから、疑問を感じました。

> QUERY_STRING:var=%cb にならなければおかしいですね。
> 25 という文字が入るのはなんでしょう?。4.2.3 のバグ?。
> PHP 4.2.1 ならば、ちゃんと %cb になって、$_GET['var']
> 即ち urldecode($_SERVER['QUERY_STRING'])は、当然のこと
> ながら、文字化けします。

PHP 4.1.2 で試してみましたが、GET['var']:%cb となります。
まったく同じスクリプトを動かした結果なので、
やはり、PHP 4.2.3 のバグのような気がしますが…

バージョン変更はレンタルサーバなため、ちょっと難しいので、
回避する方法を模索中です。
何か言い方法をご存知ないでしょうか?

*****************
Shinichi Moritani
*****************