このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

URLエンコードとPathArgについて

発言者:重松修
( Date Monday, December 22, 1997 13:56:39 )


表題のURLエンコードの件ですが、PathArgがエンコードされたりされなかったり
するのですが、どのような場合にエンコードされるのでしょうか?

たとえば、http://domain/gatewayapp.acgi$list,myRoom
という形式でアクセスする場合に“,”が%2Cとエンコードされることがあるよう
なのです。

どの範囲の文字がエンコードされ、どの範囲はエンコードされないのか、ご存知
でしたら教えて下さい。

田中求之 さんからのコメント
( Monday, December 22, 1997 16:03:09 )

URL エンコード( % + HEX ) すべき文字は ASCII コード(10進)でいうと
32 以下と、127以上というのが基本ですが、以下の記号も URL エンコードします。

space, "$", "&", "=", "+", """, "\", "'", ";", "/", "#", "?", ":"

Cだと以下のようなルーティンを使います。

void EncodeChar (unsigned char c, char *s, int *j)
{
char *bad = " $&=+\"\\';/#?:";
int i;
  if (c<33 || c>126) {
    CharToHex (c, &s[*j]);
    *j+=3;
  }
  else {
    for (i=0;i<14;i++)
      if (c == bad[i]) {
        CharToHex (c, &s[*j]);
        *j+=3;
        break;
      }
    if (i==14)
      s[(*j)++] = c;
  }
  

}

ただ、一部の記号については、ブラウザーによって(あるいはサーバーがパラメーター
にする際に)、扱いが異なるものがあるようです。

path, search, post は、URL デコードを自分で行うようにしておくのが確実
なのと、"," のようなデコードに違いが見られる記号が用いないようにするのが
安全でしょう。

重松修 さんからのコメント
( Tuesday, December 23, 1997 23:02:39 )

田中先生、ありがとうございます。

とりあえず、path, search, postはURLデコードするように変更しました。