- wiki:dokuwiki [DokuWiki]
http://wiki.splitbrain.org/wiki:dokuwiki - wiki:tips:weblog_bookmarklet [DokuWiki]
http://wiki.splitbrain.org/wiki:tips:weblog_bookmarklet
DokuWiki に投稿するブックマークレットがあったので早速使ってみたところ、いくつか手を入る必要があったので、そのメモ。
まずは、上記サイトに掲載されているPHP コードを"post2wiki.php" などの名前をつけて保存、それをDokuWiki フォルダの中などに設置、"SETUP SECTION" を自分の環境に合わせて書き換えれば下準備はOK。"$dokuwikipath" は"/path/to/dokuwiki/doku.php" のようにファイル名まで含めておいたほうが良いみたいです。あとはコード内にコメントとして書き込まれている、"BOOKMARKLET" を適当にブラウザに登録すれば投稿できるはずです。Sleipnir 1.66 でも使えることを確認済み。
このブックマークレットでは、投稿時の時間をWiki 名とし、ページタイトルとURL(URI)、選択していたテキストを自動的にDokuWiki に投稿してくれます。ただブックマークレットのJavaScript コードにミスがあり、そのままでは選択したテキストが貼られなくなっていたので、こそっと修正しておきました("&ur=" を追加)。Wiki ってベンリ!!
また、ページの一番下に「UTF-8 環境でのテストはしていない」 と書いてあるように、日本語は文字化けしてしまいます。なのでこれも何とかしてみた。
JavaScript でURI エンコードしたテキストをPHP でデコードする、ということで、以下のサイトの実験が大変役に立ちました。ありがとうございます。
- PHPとJSのURIエンコード比較
http://jsgt.org/ajax/ref/charset_test/responsetext/php/urlencode.php
- ブックマークレット内の"escape()"(3箇所) を全て"encodeURIComponent()" に変更。
- "POST TO WIKI" 内の以下の3行をその下の6行に書き換え。
$wikitext=$_GET['te']; // things to log : Selected text
$url=$_GET['ur']; // things to log : URL
$title=$_GET['ti']; // things to log : title
↓
$wikitext_=$_GET['te']; // things to log : Selected text
$url_=$_GET['ur']; // things to log : URL
$title_=$_GET['ti']; // things to log : title
$wikitext=rawurldecode("$wikitext_"); // things to log : Selected text
$url=rawurldecode("$url_"); // things to log : URL
$title=rawurldecode("$title_"); // things to log : title
もっとスマートに書けると思うのですが、私の実力ではムリだった...。なのでこんな恥さらしなコードでWiki を書き換えるのははばかられるので、とりあえずここでこそっと公開。
JavaScript の"escape()" はブラウザによってエンコード方法が異なるらしく、代替となる"encodeURIComponent()" の使用が推奨されているようです。MT 2.661 のブックマークレットも"escape()" を使っていて、WWWOFFLE を経由させていると文字化けることがあったのでたぶんこのへんが原因っぽい。というわけで早速書き換えておいた。