如何在Jekyll Liquid中进行URL编码?

7

我遇到了一个问题,当我使用带有umlauts(如ä、ü)的德语单词时,类别没有进行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 %}

有人能帮忙吗?


现在链接是什么样子?/categories/eichhörnchen - Seamus Abshere
是的:看起来像是类别/松鼠。 - Peterb
你想要 eichh%C3%B6rnchen 或类似的东西吗? - Seamus Abshere
是的,这正是我使用_cgi_escape_时预期的结果。目前,如果我点击/categories/eichhörnchen链接,我会收到一个错误消息(g错误:US-ASCII中的无效字节序列)。 - Peterb
但这也可能是另一个问题。文件似乎已经被创建,但只有Webrick抛出了一个错误:invalid byte sequence in US-ASCII // WEBrick/1.3.1 (Ruby/1.9.3/2012-04-20) at 0.0.0.0:4000 - Peterb
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 }}">

博客文章无法访问。 - jcubic
@jcubic,你认为我应该删除这个链接吗?我只是为了这种情况引用了重要部分。 - opello
你可以用<strike></strike>来包裹行,也可以使用{{ url | url_encode }}来明确如何使用插件。 - jcubic

0

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

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

$ [sudo] gem install jekyll --pre

此GitHub问题帖子将更详细地介绍此问题: https://github.com/mojombo/jekyll/issues/960


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接