【发布时间】: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