[PHP-users 12798] Re: URLエンコードされた文字列に対する処理

Naoto Arai php-users@php.gr.jp
Fri, 24 Jan 2003 19:27:44 +0900


いわきり様


情報ありがとうございます。

PHP 4.2.3(mbstring.c)の不具合が原因であることが確信できました。
今夜はぐっすり眠れそうです。




調査、検証してくださった皆様、誠に有難うございました。




> いわきりです
> 
> HOTTA Michihide wrote in <20030124150838.6106.HOTTA@net-newbie.com> :
> >堀田@諫早市です。
> >> 日本語での情報であれば、下記を見てください。
> >> [PHP-dev 492] Re: users に流した mbstring.c パッチにバグがありました
> >> [PHP-users 9905] Re: エンコーディング自動変換バグ(was Re: PHP 4.2.3
> >> で4  バイト以下の配列の変数値が取れない)で、説明があります。
> >このことでしたか。
> 
> urlのdecodeが二重に行われるという、問題提起ではなかったので、
> 判り辛く、多くの人が認識していなかったかもしれませんね。
> 
> 修正前(php-4.2.3のmbstring.c)が、
>     strtok_buf = NULL;
>     var = php_strtok_r(res, separator, &strtok_buf);
>     while (var)  {
>         val = strchr(var, '=');
>         val_list[n] = var;
>         len_list[n] = php_url_decode(var, strlen(var));    // 1回目のdecode
>         n++;
>         if (val) { /* have a value */
>             *val++ = '\0';
>             val_list[n] = val;
>             len_list[n] = php_url_decode(val, strlen(val)); // 2回目のdecode
>         } else {
>             val_list[n] = "";
>             len_list[n] = 0;        
>         }
>         n++;
>         var = php_strtok_r(NULL, separator, &strtok_buf);
>     } 
> 
> となっており、2重にdecodeされています。
> そのため、石井さんがご指摘下さったように、漢字コードの判定も
> 失敗していたようです。
> 
> -- 
> Youichi Iwakiri