如何在jekyll液体中进行url编码?

时间:2013-04-12 16:31:06

标签: ruby jekyll liquid

我有问题,当我使用德语单词和变音符号(例如ä,ü)时,类别不是url编码的。我尝试了Liquid似乎提供的cgi_escape,但是使用以下代码成功:

<strong>Kategorien</strong><br/>
{% for category in site.categories  do %}
  <small><a href="/categories/{{ category[0] | cgi_escape }}">{{ category[0] }} </a><br/>
         </small>    
{% endfor %}

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:6)

使用cgi_escape对于包含空格的类别无效。链接生成为/category/the+category而不是/category/the%20category

我最终使用的解决方案来自 this blog post

# _plugins/url_encode.rb
require 'liquid'
require 'uri'

# Percent encoding for URI conforming to RFC 3986.
# Ref: http://tools.ietf.org/html/rfc3986#page-12
module URLEncoding
  def url_encode(url)
    return URI.escape(url, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
  end
end

Liquid::Template.register_filter(URLEncoding)

加号是一个文字加上任何地方,但在URL的查询部分,它代表一个空格。 Good URL encoding reference archive.org mirror)。

然后可以在布局或其他任何地方使用它:

<a href="{{ site.category_dir }}/{{ category | url_encode }}">

答案 1 :(得分:0)

@Peterb,您升级到最新版的Jekyll吗?当前的1.0x版本支持UTF-8,并且更好地处理这样的URL。

您可以通过终端命令行运行最新版本来安装最新版本:

$ [sudo] gem install jekyll --pre

这个GitHub问题帖子将更多地阐明这个问题: https://github.com/mojombo/jekyll/issues/960