我正在使用rails 2.3.5。我有一个活动资源。
map.resources :events
respond_to do |format|
format.html
format.js { render :text => @event.to_json, :layout => false }
end
这是一个公共网站,有时我会得到像
这样的网址http://domain.com/events/14159-international-hardware-show-2010+91+ “PRASHANT” + 2010 + OR +电子邮件+ OR +数据+ OR +碱+ -ALIBA.BACOM&安培; HL = EN&安培; CT = clnk
我一直在收到hoptoad例外邮件。我该如何处理这类案件?
它失败了,因为网址有.BACOM。我猜rails看起来是show.bacom.erb。
答案 0 :(得分:1)
如果确实存在点(。)问题,则需要对URL进行正确编码。这可以这样做:
require 'uri'
val = "prashant"+2010+OR+email+OR+data+OR+base+-ALIBA.BACOM"
encodedVal = URI.escape(val)
或将URI.escape
替换为CGI.escape
,以便用+
替换空格(而不是%20
)现在使用encodedVal
构建正确的编码网址而不是原来的val
。
答案 1 :(得分:1)
我认为这个'item1 + item2 + item3'链是你真正的问题。
HTML标准非常具体地说明了如何指定参数:它们必须使用询问符号(?)与URL分开,并且每个参数都具有以下语法:name=encoded_value
。参数分隔符是&符号(&)。
因此,指定参数的标准方法是:
这样的网址将允许您的控制器获取91
中的params[:number]
,"prashant"
中的params[:username]
等。
如果由于某种原因你必须保留非标准结构,你可以。您必须将所有非标准零件放在“大标准参数”中。
现在,您将在"91+prashant+2010+OR+email+OR+data+OR+base+-ALIBA.BACOM"
中拥有链params[:bigparameter]
。但是你必须自己解析它。
我强烈建议您遵循第一个选项。一般来说,尊重标准是一个好主意(这意味着更少的问题并简化工作)。
在这两种情况下,“?” sign将使服务器区分基本URL和参数,因此您不会对url格式有任何问题。