在我的本地计算机上,我可以搜索“Härtefälle”,这将生成以下网址:
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=
但是在我的生产环境中,当我输入搜索词并单击“应用”时,我得到以下结果:
好奇地,当我一直按下Apply时,这个词变得更大,更奇怪,但不知何故,搜索引擎仍然能够在这个奇怪的
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
现在我如何在生产中获得理智的行为?如果我能提供更多相关信息,请通知我。
答案 0 :(得分:0)
我弄清楚我做错了什么:
在步骤1
中,字符已正确编码,但对于我构成新网址的步骤2
,我需要使用URI.encode
转义网址:
URI.encode(myURL)
所以,例如ö
变为%C3%B6