Tuesday, January 22, 2008

Rails URI error[resolved]

当RAILS收到的请求URL里带有一些特殊字符时,RAILS直接会抛出一个URI异常,并且RAILS的LOG里也不会有此请求的记录生成,错误类似于:
irb(main):015:0> require 'uri'
irb(main):016:0> URI.parse('http://www.test.com/main/show?user=M603&db=test&border=1local=y|e|s')
URI::InvalidURIError: bad URI(is not URI?): http://www.test.com/main/show?user=M603&db=test&border=1local=y|e|s
from C:/ruby/lib/ruby/1.8/uri/common.rb:432:in `split'
from C:/ruby/lib/ruby/1.8/uri/common.rb:481:in `parse'
from (irb):16
from :0


在RAILS项目的config/environment.rb最后面加上以下代码:
module URI
class << self
alias _parse parse
def parse(uri)
uri = escape(uri) if uri.match(/[#{Regexp::quote('{}|\^[]`')}]/)
_parse(uri)
end
end
end


参考http://www.ietf.org/rfc/rfc2396.txt

No comments :