趣味と実益と現実逃避で更新されるblogです.
役に立つことから無意味なことまでさまざま書いていきます.
|
February 21st, 2007 |
PukiWikiで外部リンクのHTML出力をハックする(Read: 812189) |
参照: |
PukiWikiを使用しているとき,外部リンクについて不満が出ることがあると思います. おおよそでいうと「新しいウィンドウ(タブ)で表示するようにしたい」「リファラーが相手に伝わらないようにした」あたりじゃないでしょうか |
リンクはどこで作っているのか?簡単にいうとpukiwiki/lib/make_link.phpで,Link_urlというクラスでハイパーテキストリンクを作成しているようです.該当の処理はおおよバージョン1.4.7では347行目のこの辺 class Link_url extends Link { (snip) function toString() { if (FALSE) { $rel = ''; } else { $rel = ' rel="nofollow"'; } return '<a href="' . $this->name . '"' . $rel '>' . $this->alias . '</a>'; } 新しいウィンドウ(タブ)で表示するようにしたい新しいウィンドウでリンク先を表示する場合,属性targetに_blankを指定するのが一般的だと思います(いずれは意思の方向らしいけど今後はどうやるのが正しいんだろ)PukiWikiでこの辺の処理が行われる場合,自分のベースになるURLは$scriptに入っています(pukiwiki.ini.phpで未指定でもこの辺りに来たときには自動設定されています). リンクは$this->nameに入っているので,これの差を調べればいいことになります. ってことでざっくり修正. こんな感じです. function toString() { + global $script; if (FALSE) { $rel = ''; } else { $rel = ' rel="nofollow"'; } + if (strncasecmp(strtolower($this->name), strtolower(($script), strlen($script)) == 0) { + $target = ''; + } else { + $target = ' "target"="_blank"'; + } - return '<a href="' . $this->name . '"' . $rel . '>' . $this->alias . '</a>'; + return '<a href="' . $this->name . '"' . $rel . $target . '>' . $this->alias . '</a>'; } } 今回はベースになるURLをしらべるときに正規表現を使ってません. 個人的にはURL位の自由分にはあまり正規表現は使いたくないので単に文字列の部分比較です(一応strtolowerでcase insentiveな比較をしています). これで外部リンクのみ「"target"="_blank"」が付加されます. 相手にリファラーを残したくない社内でWikiを使用している場合,社外にそれの存在を知られたくない場合があります.これを回避するためにgoogleを経由したリダイレクトを行う方法があります. #googleにはばれますけど.いやなら自分でリダイレクト用ページを作るといいでしょう これも同様の処理でできると思います. if (strncasecmp($this->name, $script, strlen($script)) == 0) { $target = ''; $redirect_url = ''; } else { $target = ' target="_blank"'; $redirect_url = 'http://www.google.com/url?sa=D&&q='; } return '<a href="' . $redirect_url . $this->name . '"' . $rel . $target . '>' . $this->alias . '</a>'; もし自前でリダイレクトページを用意できるときは$redirect_urlをそれにすればいいでしょう. #老婆心ですが自作リダイレクトページは誰でも乱用できないようにしましょうね |
ELF Feb 21st, 2007 11:57 / [ 編集 ]
[ コメントする ] [ トラックバック(1) ] [ ] |
[ POST ] [ AddLink ] [ CtlPanel ]
<< | 11月 | >> | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | * | * | * | * | * |