« 検索のワイルドカード | Main | Thingamablog は終わっていない »
カテゴリのページを作る機構にバグがあることを発見した。下手に直すと既存のカテゴリページの URL も変わってしまいそうだ。
カテゴリページのファイル名はカテゴリ名を元に決められるようになっている。net.sf.thingamablog.blog.TBWeblog クラスの getCategoryFileName(String, String) メソッドで定義されているのだがおおよそ次のようになっている。
安全な文字だけでカテゴリ名を書いてれば問題はない。日本語だけでカテゴリ名を書いているときもカテゴリ名が異なれば(ほぼ)問題がない。しかし安全な文字と日本語を織り交ぜているときは問題になる。
例えば「Web 標準」と「Web アクセシビリティ」はどちらも「web」となってしまうのだ。その結果ページの生成順序でたまたま後になった方のカテゴリページが上書きされてしまってなくなってしまう。もちろんどちらのカテゴリページへのリンクも全て同じ URL を指すようになってしまう。
どうするのがベストだろうか? ハッシュコードに基づいたファイル名に統一すればほぼ問題はないのだが、既存のカテゴリでその名前に安全な文字を使用しているものはファイル名が変わってしまう。安全な文字でないところだけハッシュコードにするとファイル名が長くなってしまう。
%-escape した文字にすればいいような気がする。日本語は三倍の長さに膨れ上がるが、その結果ファイル名が長過ぎるようになってしまったら既存のアルゴリズム通りにハッシュコードを用いいればいいのだから。