如何处理。网址中的东西

时间:2010-03-16 01:05:08

标签: ruby-on-rails

我正在使用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。

2 个答案:

答案 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。参数分隔符是&符号(&)。

因此,指定参数的标准方法是:

http://domain.com/events/14159-international-hardware-show-2010?number=91&username=prashant&year=2010&source=ALIBA.BACOM&hl=en&ct=clnk

这样的网址将允许您的控制器获取91中的params[:number]"prashant"中的params[:username]等。

如果由于某种原因你必须保留非标准结构,你可以。您必须将所有非标准零件放在“大标准参数”中。

http://domain.com/events/14159-international-hardware-show-2010?bigparameter=91+prashant+2010+OR+email+OR+data+OR+base+-ALIBA.BACOM&hl=en&ct=clnk

现在,您将在"91+prashant+2010+OR+email+OR+data+OR+base+-ALIBA.BACOM"中拥有链params[:bigparameter]。但是你必须自己解析它。

我强烈建议您遵循第一个选项。一般来说,尊重标准是一个好主意(这意味着更少的问题并简化工作)。

在这两种情况下,“?” sign将使服务器区分基本URL和参数,因此您不会对url格式有任何问题。