http://www.dmm.com/search/=/category=/searchstr=wNiVhseKxJSdzJCElow_/
想像です。
たぶんインデックスのようなもので、次にアクセスしたときに早くなるのではないかなと思います。
検索するにはデータをサーチしないといけません。
データにインデックスがあると実データを探さずに、インデックスをサーチすればよちので検索が早いです。
データがもっと大量でインデックスをサーチしても遅い場合に、関数を使う場合があります。
ハッシュ関数などといったりします。
検索対象の文字を入れると、それに対応した結果が返されます。
その結果を使ってデータの格納場所を特定します。
データやインデックスをサーチしないので大量のデータを検索するときは検索が早くなります。
関数を作るのが難しい部分です。
入力したデータに対して必ず関数の結果が異なる必要があります。
私は作れません。
変換方式ですが、Base64エンコードといわれる方式に酷似しています。
http://ja.wikipedia.org/wiki/Base64
Base64で余った部分を埋める『=』の代わりに『_』を使用しているという大きな違いがあります。
『=』はURL中の文字列には使用できないと(RFC2396)で定められているようですので、
その対応だと思われます。
あと、独自の変換表を使用しているのか、変換前文字列の文字コードに細工してから
変換しているのか等……詳しい方式はわかりませんが、そのままBase64方式でデコード
できないようになっていました。
この方式が、一般的なものなのか、DMMでしか使用されていないものなのかまでは調べきれていません。
他のサイト例についてもわかりません。
使用している理由についての推測ですが、
ひとつ、できるだけ短くしたかったから。
Base64だと『あ⇒gqA=』『あい⇒gqCCog==』『あいう⇒gqCCooKk』と3分の4倍程度にデータ量が増えるのですが、
URLエンコードだと同『%82%A0、%82%A0%82%A2、%82%A0%82%A2%82%A4』と3倍に膨れ上がります。
ふたつ、機械的にアクセスされて情報を収集されるのを回避するため、
Base64をそのまま使うのではなくちょっとわかりにくい方法にした。(憶測)
等が思い至りましたが、実際のところはわかりません。
追記
>とのことですが、DMM.comはURL中に『=』を使用していますね。^^;
大嘘でした。
『=』は、予約されているだけですね。
おっしゃるとおり、区切りとして使ってます。DMMに限らず広く、世界中で。
本来の用途外での使用は避けるべき。程度に読み代えてくださいませ。
(RFCにわか仕込みなので、深くは突っ込まないでください。)
ありがとうございます。かなり納得できました。
URLとしてよく使われるエンコード方式があるのかもしれませんね。
なお、
>『=』はURL中の文字列には使用できないと(RFC2396)で定められているようですので、
とのことですが、DMM.comはURL中に『=』を使用していますね。^^;
パラメータの区切り文字のように使っているようです。
例)
ありがとうございます。
インデックスやパーティションのキーにする際に
データの偏りを解消するためにハッシュ関数に通しているのではと考えましたが、
重複する可能性があるのを解決できないと思いました。