6

当我使用带有变音符号的德语单词(例如ä、ü)时,我遇到的问题是类别不是 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 %}

任何人都可以帮忙吗?

4

2 回答 2

7

对于带有空格的类别,使用cgi_escape无法正常工作。链接生成为/category/the+category而不是/category/the%20category.

我最终使用的解决方案来自这篇博文

# _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 的查询部分之外的任何地方的文字加号,它代表一个空格。 良好的 URL 编码参考archive.org 镜像)。

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

<a href="{{ site.category_dir }}/{{ category | url_encode }}">
于 2013-07-21T05:11:27.177 回答
0

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

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

$ [sudo] gem install jekyll --pre

这篇 GitHub 问题帖子将更清楚地说明这个问题: https ://github.com/mojombo/jekyll/issues/960

于 2013-04-16T22:54:16.913 回答