in between days

表参道で働くシニアのブログ

はてなブックマークで「はてなブックマークの本欲しい!とは - はてなダイアリー」のエントリページが2種類(以上)存在するのはなぜか?

はてなアイディアを見ていたら
idea:17836 - はてなアイデア

id:AKIThttp://b.hatena.ne.jp/entry?eid=6486749http://b.hatena.ne.jp/entry?eid=6486792です。
URLエンコードの大文字と小文字の違いで別ページになっているようです。』 (2007-11-13 19:10:00)

というヘンテコな状況が報告されてました。

面白そうだったのでいろいろ試してみたところ挙動がわかった感じだったので報告します。

とりあえずの結論

まず最初に結論ですが、URLエンコードの大文字小文字の扱いについて、

  1. ダイアリー(キーワード)とブックマークで扱いが異なる
    • はてなダイアリー(キーワード)は小文字を利用
    • はてなブックマーク(表示)では大文字に正規化
  2. はてなブックマークでは、表示時とブックマーク時で扱いが異なる
    • 表示するときは、上記のように大文字に正規化する
    • ブックマーク時には何もしない(=小文字のままでブックマーク可能)

という2つの挙動の違いにより、このヘンテコな動作が起きているもようです。

順を追って見ていきましょう。

はてなダイアリー(キーワード)のaタグでは小文字にURLエンコードされている

keyword:はてなブックマークの本欲しい!

このリンクは、はてなダイアリーでは次のURLになっています。小文字です。

http://d.hatena.ne.jp/keyword/%a4%cf%a4%c6%a4%ca%a5%d6%a5%c3%a5%af%a5%de%a1%bc%a5%af%a4%ce%cb%dc%cd%df%a4%b7%a4%a4%a1%aa

このキーワードページ中にもたくさんのはてなキーワードがリンクされていますが、どのURLを確認してもすべて小文字になっていることがわかると思います。

はてなブックマークで表示するのは大文字

しかし、上記の「keyword:はてなブックマークの本欲しい!」というページの、【応募方法】欄に貼られた「エントリーページ」というリンクのURLは大文字になっています。

http://b.hatena.ne.jp/entry/http%3A//d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%C3%A5%AF%A5%DE%A1%BC%A5%AF%A4%CE%CB%DC%CD%DF%A4%B7%A4%A4%A1%AA

このブックマークのエントリーページの「URL:」欄を見ると

http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%C3%A5%AF%A5%DE%A1%BC%A5%AF%A4%CE%CB%DC%CD%DF%A4%B7%A4%A4%A1%AA

となっています。つまり「大文字」の「はてなブックマークの本欲しい!とは - はてなダイアリー」をブックマークしたという扱いです。

試しにこのブックマークエントリーのURLを任意に小文字にしてみましょう

URLの違いがわかるかな。微妙ですけど、途中が大文字になったり小文字になったりしてます。でも、どのページにアクセスしても、

http://b.hatena.ne.jp/entry/http%3A//d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%C3%A5%AF%A5%DE%A1%BC%A5%AF%A4%CE%CB%DC%CD%DF%A4%B7%A4%A4%A1%AA

と同じ内容が表示されます。つまり、はてなブックマークでは、URLエンコードを大文字に正規化して表示していることになります。

さらに言うなら Hatenabar の http://d2.hatena.ne.jp/images/b_entry_lb.gif ボタンをクリックしたときにブラウザのナビゲーション欄には1番目の「全部小文字」のURLが表示されているはずですが、実際に表示されているは「全部大文字」扱いで処理されています(これも後で副作用的に効いてきます)。

でも小文字のURLもブックマークできる

ここまでなら問題ないんですが、こっからが問題です。

keyword:はてなブックマークの本欲しい! のページを表示しているとき、Hatenabar(Firefox)の http://b.hatena.ne.jp/images/append.gif ボタンを押すとどうなるでしょう?

このページに飛ばされます。

http://b.hatena.ne.jp/add?mode=confirm&title=%u306F%u3066%u306A%u30D6%u30C3%u30AF%u30DE%u30FC%u30AF%u306E%u672C%u6B32%u3057%u3044%uFF01%u3068%u306F%20-%20%u306F%u3066%u306A%u30C0%u30A4%u30A2%u30EA%u30FC&url=http%3A//d.hatena.ne.jp/keyword/%25a4%25cf%25a4%25c6%25a4%25ca%25a5%25d6%25a5%25c3%25a5%25af%25a5%25de%25a1%25bc%25a5%25af%25a4%25ce%25cb%25dc%25cd%25df%25a4%25b7%25a4%25a4%25a1%25aa

URLのお尻のほうをよくを見てください。キーワードページのURLエンコードが小文字のままです。

ブックマークしてみました。スクリーンショットはこんな感じ

で、この時点でまだ「6 users」っておかしいですよね?

そう、これこそが idea:17836 で問題になっていたこのページです。

http://b.hatena.ne.jp/entry?eid=6486749

このエントリーのわけなんですね。

ただし、このエントリーには自分のブックマークページからは飛ぶことができない。↑のようにeidを直打ちしてやんないといけない。

なぜなら、上記のように「表示するときには大文字に正規化される」ので、小文字でブックマークしたリンクを辿っても、表示されるのは大文字のページなんですよね。ブックマークはできるが表示は(単純には)できない。そういう不可解なページが出来上がります。

そういう不具合です。

はてなクローズドな不具合

これがすごく問題なのは、何かヘンなエンコードでブックマークしてやろうとかいう作為的なイタズラじゃないってことです。だってブックマークするのに使ったのは、はてなが提供している Hatenabar なんですから。

しかもブックマークされてるのはキーワードのページなワケで、はてなダイアリーキーワード+はてなブックマーク+Hatenabar という、はてな謹製のサービスだけを組み合わせて、それも本来の正しい使い方をしたときに起こる不具合なわけです。しかも、はてなのキャンペーンで問題になっているという。完全にはてな内に閉じた不具合なわけで、ちょっとタチが悪いですねこれは。

さらに不具合の拡張

で、もっと問題なのは、小文字のままのURLもブックマークできるということは、表示するときには正規化されてしまう「URLエンコード部分に大文字と小文字が混じったURL」をそれぞれ別のURLとしてブックマークできてしまうんですね。

というわけで私は同じページを3種類もブックマークしてみました!

これで当選確率が3倍です!

頑張ればURL中のアルファベットの大文字・小文字の組み合わせの数だけ別個にブックマークできますから、当選確率を増やしたいかたは頑張ってみるといいと思います!

おまけ - もうひとつの問題

idea:17836 の2つ目のコメントで

id:herecy8 『まだ他にもあるようです。
http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/keyword/%25A4%25CF%25A4%25C6%25A4%25CA%25A5%25D6%25A5%25C3%25A5%25AF%25A5%25DE%25A1%25BC%25A5%25AF%25A4%25CE%25CB%25DC%25CD%25DF%25A4%25B7%25A4%25A4%25A1%25AA
後ろの?eid=以下がなくても有効なので、もうあと2種類存在します。』 (2007-11-13 20:57:06)

とあるこのURLは何が違うかというと、そうだね プロテイン 「:(コロン)」がURLエンコードされているかどうかが違うんだね。これはたぶん不具合の種類としては

idea:7932 - はてなアイデア

の仲間なんじゃないかと思うんだけど、これを検証しようとすると長くなるからここいらでやめておきます。

そのほか、はてなアイディアのはてなブックマークのコーナーで、URLエンコードとかそのあたりのタームで検索すると不具合事例がかなり報告されています。はてなブックマークのURLエンコードの扱いはけっこうバギーという印象を受けるのですけども、これはURLの仕組み的に不可避的な不具合だったりするんでしょうかね?

最後に

まあ、なんにせよ、自社キャンペーンに自社サービスを利用してエントリーすると不具合が起きる、というのは早々に直したほうがいいんじゃね? といういことでいちおアイディア出しておきました。
idea:17837 - はてなアイデア
でも↑は問題の本質じゃないわけで、直すなら場当たり的にじゃなくてテッテ的にやってもらえればと期待します。