gpt4 book ai didi

ruby-on-rails - URI::InvalidURIError(URI 只能是 ascii)

转载 作者:太空宇宙 更新时间:2023-11-03 17:43:14 24 4
gpt4 key购买 nike

我有一个遗留的 Rails 3.2 应用程序,当我尝试使用非 ascii 字符时,例如; example.com/city/bergstraße 然后我收到以下错误:

/Users/user/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/uri/rfc3986_parser.rb:20:in `split'
/Users/user/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/uri/rfc3986_parser.rb:72:in `parse'
/Users/user/.rvm/rubies/ruby-2.2.5/lib/ruby/2.2.0/uri/common.rb:226:in `parse'
actionpack (3.1.0) lib/action_dispatch/routing/redirection.rb:91:in `block in redirection_proc'
rack-mount (0.8.3) lib/rack/mount/route_set.rb:152:in `call'
rack-mount (0.8.3) lib/rack/mount/route_set.rb:152:in `block in call'
...

问题是,我在访问任何 Controller 之前收到此错误,所以我想知道我在哪里可以捕获此错误以解析和修复 URL?谢谢。

P.S:在将我指向任何以前的帖子之前,请先查看堆栈跟踪。

最佳答案

根据 RFC 3986 URI 可能只包含 ASCII 字符的子集。

要提供有效的 URI,应转义非 ASCII 字符:

irb(main):008:0> URI.parse "example.com/city/#{URI.encode('bergstraße')}"
=> #<URI::Generic example.com/city/bergstra%C3%9Fe>

The problem is, that I get this error before hitting any controller, so I just wonder where can I catch this error to parse and fix the URL?

问题是你真的不应该捕捉到这个错误。您的 Rails 服务器不应该负责响应错误或格式错误的请求。

虽然您可以尝试编写一个中间件来解决这个问题,但您应该弄清楚为什么客户端发送对无效 URI 的请求。

如果它们源自您自己的应用程序,请确保您正确转义了 slug 列,而不仅仅是使用字符串插值创建 url。 stringex gem 或 friendly_id是你的 friend 吗?

关于ruby-on-rails - URI::InvalidURIError(URI 只能是 ascii),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50157965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com