我有以下代码可以在生产中使用:
redirect_to "/mycontroller/index.html#&panel1-2?error=Invalid Member ID and/or Date of Birth"
在开发中(使用Webrick),我收到以下错误消息:
ERROR URI::InvalidURIError: bad URI(is not URI?): http://localhost:3000/mycontroller/index.html#&panel1-2?error=Invalid Member ID and/or Date of Birth
但是,如果我在浏览器地址栏中复制并粘贴所谓的错误URI,它就可以了!
我尝试了错误消息文本的各种组合,并且单词之间的空格导致了它。我可以通过使用URI.escape或其他一些技术来逃避空间,但是我必须在代码中更改数百个这样的事件才能正常工作。
感谢您抽出宝贵时间提供帮助。
答案 0 :(得分:3)
如下所示,您的URI实际上无效。您的URI中不能包含未转义的空格。
1.9.3p194 :001 > require 'URI' => true
1.9.3p194 :002 > URI.parse('http://localhost:3000/mycontroller/index.html#&panel1-2?error=Invalid Member ID and/or Date of Birth')
URI::InvalidURIError: bad URI(is not URI?): http://localhost:3000/mycontroller/index.html#&panel1-2?error=Invalid Member ID and/or Date of Birth
from /Users/ccashwell/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/uri/common.rb:176:in `split'
from /Users/ccashwell/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/uri/common.rb:211:in `parse'
from /Users/ccashwell/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/uri/common.rb:747:in `parse'
from (irb):2
from /Users/ccashwell/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>'
你应该escape
URI:
1.9.3p194 :003 > URI.escape('http://localhost:3000/mycontroller/index.html#&panel1-2?error=Invalid Member ID and/or Date of Birth')
=> "http://localhost:3000/mycontroller/index.html%23&panel1-2?error=Invalid%20Member%20ID%20and/or%20Date%20of%20Birth"
然后您可以redirect_to
转义的URI:
redirect_to URI.escape('http://localhost:3000/mycontroller/index.html#&panel1-2?error=Invalid Member ID and/or Date of Birth')
答案 1 :(得分:0)
对于网址,空格通常替换为%20
。大多数Web浏览器会自动替换为您,因此这解释了浏览器可以访问该网站的原因。只需使用%20
代替您的空格,您应该全部设置。