私は Sinatra を使用しており、get '/foo/:bar' {}
メソッドを使用して URL からパラメーターを取得しています。残念ながら、 /に一致するルートがないため、 の値には 404 につながる:bar
ような厄介なものが含まれている可能性があります。URLパラメーターをエスケープするために使用しますが、有効な文字と見なされます。ここで述べたように、これは、チェックするデフォルトの正規表現が安全でない文字と予約された文字を区別しないためです。これを変更したいと思い、これを行いました:/
/foo/:bar/baz
URI.escape
/
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
モジュールのドキュメントは一般的にちょっと悪いですが、私はこれを理解することはできません. ヒントはありますか?
前もって感謝します!