2010-03-16 7 views
0

J'utilise les rails 2.3.5. J'ai une ressource pour l'événement.comment gérer .quelque chose dans l'url

map.resources :events 

    respond_to do |format| 
     format.html 
     format.js { render :text => @event.to_json, :layout => false } 
    end 

Il est un site public et parfois je reçois urls comme

http://domain.com/events/14159-international-hardware-show-2010+91+ "Prashant" + 2010 + OU + email + ou + données + OU + base + -ALIBA.BACOM & hl = fr & ct = clnk

Je continue à recevoir des e-mails d'exception hoptoad. Comment puis-je gérer de tels cas?

Il échoue parce que l'URL a .BACOM. Je suppose que les rails recherchent show.bacom.erb.

Répondre

1

Si le point (.) Est en effet le problème, vous devrez encoder correctement l'URL. Cela pourrait se faire comme ceci:

require 'uri' 

val = "prashant"+2010+OR+email+OR+data+OR+base+-ALIBA.BACOM" 
encodedVal = URI.escape(val) 

ou remplacer URI.escape par CGI.escape afin de remplacer les espaces par un + (au lieu de %20) Maintenant utiliser encodedVal pour construire la bonne URL encodée au lieu de votre val d'origine.

1

Je pense que cette chaîne de 'item1 + item2 + item3' est votre vrai problème.

Le standard HTML est très spécifique sur la façon dont les paramètres sont spécifiés: ils doivent être séparés de l'URL par un signe d'interrogation (?) Et chaque paramètre a la syntaxe suivante: name=encoded_value. Le séparateur de paramètre est l'esperluette (&).

Ainsi, la manière standard de spécifier les paramètres seraient:

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

Une URL comme ceci permettra à votre contrôleur pour obtenir le 91 dans params[:number], "prashant" dans params[:username] etc.

Si pour certains raison pour laquelle doit conserver la structure non standard, vous pouvez. Vous devrez mettre toutes les pièces non standard dans un "grand paramètre standard".

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

Maintenant, vous aurez la chaîne "91+prashant+2010+OR+email+OR+data+OR+base+-ALIBA.BACOM" dans params[:bigparameter]. Vous devrez cependant l'analyser vous-même.

Je recommande fortement de suivre la première option. En général, c'est une bonne idée de respecter les normes (cela signifie moins de problèmes et simplifie le travail).

Dans les deux cas, le "?" Le signe fera en sorte que le serveur fasse la différence entre l'URL de base et les paramètres, donc vous n'aurez aucun problème avec le format de l'URL.

+0

Mon site génère l'url comme ceci http://domain.com/events/14159-international-hardware-show-2010. Les spammeurs ajoutent sur le site avec l'URL bizarre. Je pensais à ce qui serait le meilleur moyen de ne pas obtenir hoptoad. –

+0

Ensuite, ajoutez un? à la fin de vos URL générées: http://domain.com/events/14159-international-hardware-show-2010? . Cela vous permettra de rejeter tout ce que les spammeurs ajoutent facilement – kikito

Questions connexes