rcmdnk's blog
Last update

Learning JavaScript

JavaScriptでのencodeURIComponent()で行うURIエンコードを RubyのURIライブラリを使って再現して、 Octopress用のフィルタにしました。

Rubyでエンコードする方法

こんな感じで

1
2
require 'uri'
URI.escape(foo, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))

URI.escape()関数を使ってあげるとJavaScriptのencodeURIComponent()と 同じ事ができます。

How do I raw URL encode/decode in JavaScript and Ruby to get the same values in both? - Stack Overflow

octopress-encodeURIComponent

そのまま名前をくっつけたので長くなってしまいましたが、 プラグインはこちら:

上のコードをJekyll用フィルタのひな形に押し込んだだけのものです。

インストールはplugins/encodeURIComponent.rbをOctopressのpluginsフォルダに入れて 上げるだけです。

使い方も簡単で、他のフィルター同様、変換したい値に|encodeuricomponentを付けてあげるだけです。

This is original: {{site.url}}

This is encoded: {{site.url|encodeURIComponent}}

こんな感じの物を書いた時、site.urlhttp://rcmdnk.github.io/だとすると、

This is original: http://rcmdnk.github.io/

This is encoded: http%3A%2F%2Frcmdnk.github.io%2F

こんな感じで出力されます。

直接出力させても仕方ないですが、 Tumblrなんかの共有用URLへ渡す際に便利です。

Tumblrの公式からボタン設置用のコードを作ると、 追加のJavaScriptを書いてencodeURIComponent()を使って 変換して渡す、みたいなことをしてますが、 直接書ければ多少なりとも負担を減らしたりも出来るし 管理も楽になると思います。

ということで、先日書いた

シェアボタンを非同期読み込みでまとめて設定

にもOctopress用のコードの所にTumblrも追加しておきました。

追記: 2013/12/12

Jekyllの中に最初からURIを変換してくれるFilterが入ってるのを見つけました。

Templates

ちゃんと見とけ、という話ですが、上のencodeURIComponentの代わりに cgi_escapeを使えばOK。

また、日本語が途中に入ってるURLを普通にリンクとして貼りたい時は uri_escapeを使えばOK。こちらだと://みたいな部分はそのままで、 日本後やそのまま使えない記号、空白部分だけ変換してくれます。

LiquidのFilter、Jekyllで加えられたFilter、Octopressで加えられたFilter と段階があって結構たくさん便利なFilterもありそうなもんですが、 そのうちちゃんとまとめて見たいところです(誰か作ってないかな。。。)

追記ここまで

Sponsored Links
Sponsored Links

« Macのプレビューで三本指スワイプが効かない時の対処法 Windowsでミラードライバーが問題でエアロが有効にできない時の対処法 »

}