【问题标题】:How to url encode in jekyll liquid?如何在 jekyll 液体中进行 url 编码?
【发布时间】:2013-04-12 16:31:05
【问题描述】:

当我使用带有变音符号的德语单词(例如 ä、ü)时,我遇到的问题是类别不是 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?
  • 是的:它看起来像类别/eichhörnchen
  • 你想要eichh%C3%B6rnchen 或类似的东西吗?
  • 是的,这是我在使用 cgi_escape 时所期望的。目前,如果单击 /categories/eichhörnchen 链接,我会收到一条 g 错误消息(US-ASCII 中的字节序列无效)。
  • 但这也可能是另一个问题。文件似乎已创建,但只有 Webrick 抛出错误:US-ASCII 中的无效字节序列 // WEBrick/1.3.1 (Ruby/1.9.3/2012-04-20) at 0.0.0.0:4000

标签: ruby jekyll liquid


【解决方案1】:

使用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 }}">

【讨论】:

  • 无法再访问该博文。
  • @jcubic 你认为我应该删除链接吗?我只是为了这种可能性引用了重要的部分。
  • 你可以在&lt;strike&gt;&lt;/strike&gt;里面换行,也可以在{{ url | url_encode }}里面放,这样插件的使用方法就一目了然了。
【解决方案2】:

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

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

$ [sudo] gem install jekyll --pre

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多