blog/2005-07-09
色々考えた結果、以前でぃばぁさんのサイトでCubic.com:PukiWiki/改造/URL Encodeの代わりにPunycode Encodeを使う?という記事があるのを思い出した。これを利用して、へぇボタン用のアドレスにして、そのアドレスから本ページにリダイレクトさせればいいじゃん。しかも、うまくいけば、短縮アドレス用にも当然使える。この記事は、サーバーにインストールしてコンパイルする形式なので使えなかったが、もしかしたら、phpの形で配布されているところがあるかもしれない。さっそく
その結果Punycode Converterというのを発見。わかりやすい解説があったので案外楽にプラグイン化できた。とりあえず、プラグインの形でページで呼び出したときに、変換後のアドレスを出力するようにして、cmd=の形で呼び出されたときに逆変換してリダイレクトという仕様で開発することにした。これによって・・・
ラグナロクオンラインのページの場合
- 変換前
- http://logue.tk/%E3%83%A9%E3%82%B0%E3%83%8A%E3%83%AD%E3%82%AF%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3.html
- 変換後
- http://logue.tk/?cmd=puny&id=xn--ecklod4kqhe3a0dc
ファイナルファンタジー11のページの場合
- 変換前
- http://logue.tk/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%8A%E3%83%AB%E3%83%95%E3%82%A1%E3%83%B3%E3%82%BF%E3%82%B8%E3%83%BC%EF%BC%91%EF%BC%91.html
- 変換後
- http://logue.tk/?cmd=puny&id=xn--bckai5f8a2dxdd1r4czes0621aa
これだけアドレスの長さが違ってくる。しかも、UTF-8の場合3バイトで1文字を表しているため、どうしてもアドレスが長くなってしまいがちである。
で、早速へぇボタンにこの機能をつけてみたが・・・。
_| ̄|○
今度はhttp://logue.tk/?cmd=puny&id=xn--bckai5f8a2dxdd1r4czes0621aaのうちの肝心のpunycode化されたアドレスの部分が消失している
とりあえず、へぇボタンは使えるようにしたい。面倒なのでgo.phpというpunycode専用のスクリプトを用意して、そこからとばすようにしてみた。で、例によってPukiWikiのソースにハッキングをかけて・・・
<?php define('LIB_DIR', 'lib/'); require(LIB_DIR . 'func.php'); include(LIB_DIR . 'idna_convert.class.php'); $IDN = new Net_IDNA(); $arg = input_filter($_SERVER['QUERY_STRING']); $page = $IDN->decode($arg); if(!$page == ''){ $go = anchor_replace($page) . ".html";
やってることは至極簡単である。これによって短縮URLは、http://logue.tk/go.php?blog/2005-07-09となり