« 検索のワイルドカード | Main | Thingamablog は終わっていない »

2006年08月05日

カテゴリページのファイル名生成に仕様上のバグあり

カテゴリのページを作る機構にバグがあることを発見した。下手に直すと既存のカテゴリページの URL も変わってしまいそうだ。

カテゴリページのファイル名はカテゴリ名を元に決められるようになっている。net.sf.thingamablog.blog.TBWeblog クラスの getCategoryFileName(String, String) メソッドで定義されているのだがおおよそ次のようになっている。

  1. カテゴリ名の ASCII 大文字を小文字に変換する。
  2. カテゴリ名を“abcdefghijklmnopqrstuvwxyz0123456789_-”(要するにファイル名として安全な文字)以外を削除した文字列をファイル名とする。
  3. その結果空文字列になったり 20 文字より多くなったりしたら、カテゴリ名のハッシュコードをファイル名とする。

安全な文字だけでカテゴリ名を書いてれば問題はない。日本語だけでカテゴリ名を書いているときもカテゴリ名が異なれば(ほぼ)問題がない。しかし安全な文字と日本語を織り交ぜているときは問題になる。

例えば「Web 標準」と「Web アクセシビリティ」はどちらも「web」となってしまうのだ。その結果ページの生成順序でたまたま後になった方のカテゴリページが上書きされてしまってなくなってしまう。もちろんどちらのカテゴリページへのリンクも全て同じ URL を指すようになってしまう。

どうするのがベストだろうか? ハッシュコードに基づいたファイル名に統一すればほぼ問題はないのだが、既存のカテゴリでその名前に安全な文字を使用しているものはファイル名が変わってしまう。安全な文字でないところだけハッシュコードにするとファイル名が長くなってしまう。

%-escape した文字にすればいいような気がする。日本語は三倍の長さに膨れ上がるが、その結果ファイル名が長過ぎるようになってしまったら既存のアルゴリズム通りにハッシュコードを用いいればいいのだから。

  • Posted by OKAMURA at 17時02分
  • Edited on: 2006年08月05日 17時05分
  • Categories: 不満