Ruby on rails %dd,%ff。。。。UTF-8中的字节序列无效
在我的rails应用程序中,当我在url参数中添加Ruby on rails %dd,%ff。。。。UTF-8中的字节序列无效,ruby-on-rails,ruby,regex,ruby-on-rails-4,utf-8,Ruby On Rails,Ruby,Regex,Ruby On Rails 4,Utf 8,在我的rails应用程序中,当我在url参数中添加%dd或%ff时,为什么它返回UTF-8中的无效字节序列 如果字符串只包含字母+数字+下划线,我有一个regex^[a-zA-Z0-9\]+$。然后,当我在url参数中添加%dd或%ff时,它返回UTF-8中的无效字节序列 %dd和%ff是什么意思 更新: 我的控制器: def search regex = '^[a-zA-Z0-9_]+$' @search = params[:search] unless @search.match
%dd
或%ff
时,为什么它返回UTF-8中的无效字节序列
如果字符串只包含字母+数字+下划线,我有一个regex^[a-zA-Z0-9\]+$
。然后,当我在url参数中添加%dd
或%ff
时,它返回UTF-8中的无效字节序列
%dd
和%ff
是什么意思
更新:
我的控制器:
def search
regex = '^[a-zA-Z0-9_]+$'
@search = params[:search]
unless @search.match(alpha_num_under_regex).nil?
@users = User.find_by_name(@search)
render 'api/v1/users/show', status: 200, formats: :json
else
@users = []
render 'api/v1/users/show', status: 422, formats: :json
end
我的网址:
localhost:3000/api/v1/users/show?search=%dd
当paramssearch=%d
时,它返回Bad请求,这是正常的。但当我添加另一个d
,search=%dd
或search=a%dd
时,它返回Action Controller:Exception captured
-UTF-8中的无效字节序列
问题是,如何传递UTF-8中的无效字节序列错误?来自:
百分比编码,也称为URL编码,是在特定情况下在统一资源标识符(URI)中编码信息的机制。尽管它被称为URL编码,但事实上,它在主要的统一资源标识符(URI)集合中使用得更为普遍,该集合包括统一资源定位器(URL)和统一资源名称(URN)。因此,它还用于准备应用程序/x-www-form-urlencoded
媒体类型的数据,这通常用于在HTTP请求中提交HTML表单数据
查询search=%dd
根据上述处理/解释为search=
。Ruby希望该字符串为UTF-8,但0xDD
不是有效的UTF-8符号
为了避免此问题并传递预期内容,应该通过替换%
URL显式地转义搜索查询⇒ <代码>%25
(后者显然是编码百分比符号本身。)
上述操作将向rails发送%dd
查询
NB为了安全起见,应该根据上面链接的文章中指定的通用规则构建url查询:
[保留字符列表]
URI中的其他字符必须进行百分比编码。
::换句话说,在URL中使用它时需要转义%ff
。如何在rails中捕获或解救这些百分比编码
?问题不是“如何在rails中转义”,而是“如何将其传递给rails”。您可能希望阅读并理解我提供的链接中所写的内容。另外,请分享您试图访问的确切URL和您的控制器代码,以处理此案例。我更新了上面的问题
localhost:3000/api/v1/users/show?search=%25dd