MyMiniCity踏んでください!!

ただいま絶賛MyMiniCity参加中です.是非リンクを踏んでください!!(笑
February 21st, 2007

PukiWikiで外部リンクのHTML出力をハックする

(Read: 381616)
Add to Hatena Bookmark

参照:
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>';
}
}
「+」の行が追加で「-」の行が削除です.最後の「+」「-」の交互は行の差し替えです(一般的なdiffのノリ)
今回はベースになる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>';
これで外部リンクのときだけgoogle経由でリダイレクトをします.
もし自前でリダイレクトページを用意できるときは$redirect_urlをそれにすればいいでしょう.

#老婆心ですが自作リダイレクトページは誰でも乱用できないようにしましょうね


▼ この記事へのコメント ▼
こんにちは。りょーちと申します。

PukiWikiで別ウィンドウを開く方法ですが、私は下記URLで紹介されている方法を利用しております。

http://pukiwiki.sourceforge.jp/dev/?BugTrack%2F730

既に実現されていらっしゃるようなので、情報としてあまり有用ではないかもしれませんが、ご参考まで。

では、失礼いたします。

遅くなりましたが今後の参考にさせていただきますー

strtolower(($script), strlen($script))
"target"="_blank"

こんにちは。
こちらを利用させていただきました。
無事、動作はするようになったのですが、以下点を修正する必要があったので、
念のため、ご報告します。

strtolower(($script), strlen($script))
⇒ strtolower($script), strlen($script)
"target"="_blank"
⇒ target="_blank"

Pukiwikiは利用させていただいているものの、PHPとか全然分からないので
苦労しました。

では、失礼します。

トピックの参照元

▼最近のトピック

▼ 人気のトピック


< 過去の記事 [ 8All Categories ] 新しい記事 >
Powered by gsblog (customize)

[ POST ] [ AddLink ] [ CtlPanel ]

Subscribe blog

Bookmark blog

About me

about me

応援しています

我が息子が産まれたアクア・バースハウス(東京都世田谷区にある助産院)を応援しています.

翻訳のお仕事

腕に自信がある方,修行をしたい方はこちらをどうぞ.

2007 calendar

8月
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 31
| Day | Month | Year |

Powered by RRDTOOL.

Archives

Categories

Links


Mail to admin

人気ブログランキングへ RSS feed meter for http://blog.poyo.jp/ Search Engine Optimization
blogpeople.netに登録!! スカウター : よくきたblog

My Google news

My Google News

Related site

ころんころん♪ べびぽよ フォト蔵Wiki
string(40) "/categ-1/year-2007/month-8/id-1172026651"