【问题标题】:UTF-8 Characters handled differently on production environmentUTF-8 字符在生产环境中的处理方式不同
【发布时间】:2014-10-01 18:51:12
【问题描述】:

在我的本地计算机上,我可以搜索“Härtefälle”,这将导致以下 URL:

发展

http://myapp.dev/de/incoming?q=H%E4rtef%E4llen

我可以提交任意多次,看起来总是正确的:

信息:

Mac OSX 10.9.5
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0]
thinking-sphinx (3.1.1)
rails (4.0.4)
/usr/local/Cellar/sphinx/2.2.4

locale 命令:

LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

生产

但是在我的生产环境中,当我输入搜索词并单击“应用”时,我得到以下结果:

奇怪的是,当我一直按应用时,这个词变得更大更奇怪了,但不知何故,搜索引擎仍然能够看到这个奇怪的HÃÂâ¬rtefÃÂâ¬llen背后的词“Härtefällen”,因为显示了相应的搜索结果:

信息:

Debian 7.0
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
rails (4.0.4)
thinking-sphinx (3.1.1)
Package: sphinxsearch Version: 2.0.4-1.1

locale 命令:

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

底线

我在控制器中唯一要做的就是取消转义搜索参数H%E4rtef%E4llen

# TODO: Somehow `René` turns into `Ren\xE4`
params[:q] = params[:q].encode('UTF-8', 'ISO-8859-15') rescue nil

现在我如何在生产中获得理智的行为?如果我能提供更多相关信息,请告诉我。

【问题讨论】:

  • 您能告诉我们您正在使用哪个版本的 Ruby、Rails、Sphinx 和 Thinking Sphinx(对于这两种环境)?
  • 另外,我不会(通常)修改参数,而是将修改后的版本捕获为变量,并根据需要使用该变量。这应该避免为每个请求修改相同的字符串。
  • 感谢您的评论,我确实添加了相关信息
  • 可能是语言环境?在 Debian 上,您可以使用 locale 命令进行检查。它应该给你类似LANG=fr_FR.UTF-8 的东西。我不知道 Mac OSX 但命令应该是一样的。
  • @FredPerrin 我确实用locale 的输出更新了我的问题。它确实不同,但我不知道en_US.UTF-8 是否会导致任何问题。

标签: ruby-on-rails http ruby-on-rails-4 utf-8 thinking-sphinx


【解决方案1】:

我发现我做错了什么:

  1. 我有一个表单,用于将数据 POST 到服务器
  2. 服务器使用 GET 参数重定向到新 URL
  3. 在步骤1 中,字符被正确编码,但对于步骤2,我需要使用URI.encode 转义URL:

    URI.encode(myURL)

所以例如ö变成%C3%B6

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2016-05-19
    • 2020-08-31
    相关资源
    最近更新 更多