str = "a=2&b=3.05&c=testing"
我跑
require 'cgi'
out = {}
CGI::parse(str).each { |k,v| out[k] = v[0] }
当我输出a
,2是string
,我希望它是一个Int
out['a'] // "2" (instead of int 2)
out['b'] // "3.05" (instead of float 3.05)
是否有任何方法来纠正查询字符串中的类型?
更新:
添加了这个方法来测试数字
def is_a_number?(s)
s.to_s.match(/\A[+-]?\d+?(\.\d+)?\Z/) == nil ? false : true
end
和解析
CGI::parse(url).each do |k,v|
val = v[0]
if is_a_number? val
val = val.include?('.') ? val.to_f : val.to_i
end
out[k] = val
end
似乎与基本示例工作期间。这有什么不安全的吗?
你只得到字符串作为查询值。这是为了简化HTTP会话/查询/事务。想象一下,如果整数和实数的本地二进制表示从非异构系统中抛出,我们就会有乐趣。因此,由于您在连接的服务器端,因此您必须了解您应接收的值的类型。 –