我正在使用 Sinatra 并使用该get '/foo/:bar' {}
方法从 url 获取参数。不幸的是,in 中的值:bar
可能包含一些讨厌的东西,比如/
导致 404,因为没有路由匹配/foo/:bar/baz
/。我URI.escape
用来转义 URL 参数,但它认为/
valid 是一个有效字符。正如这里提到的,这是因为要检查的默认正则表达式不区分不安全字符和保留字符。我想改变它并这样做:
URI.escape("foo_<_>_&_3_#_/_+_%_bar", Regexp.union(URI::REGEXP::UNSAFE, '/'))
只是为了测试它。
URI::REGEXP::UNSAFE
是根据Ruby 1.9.3 Documentaton匹配的默认正则表达式:
escape(*arg)
Synopsis
URI.escape(str [, unsafe])
Args
str
String to replaces in.
unsafe
Regexp that matches all symbols that must be replaced with
codes. By default uses REGEXP::UNSAFE. When this argument is
a String, it represents a character set.
Description
Escapes the string, replacing all unsafe characters with codes.
不幸的是,我收到此错误:
uninitialized constant URI::REGEXP::UNSAFE
正如这个 GitHub 问题所暗示的,这个 Regexp 已从 1.9.3 的 Ruby 中删除。不幸的是,URI
模块文档通常有点糟糕,但我真的无法弄清楚这一点。有什么提示吗?
提前致谢!