2015-11-04 1 views
1

J'utilise CGI::escape pour encoder des symboles dans une chaîne, avant d'envoyer la chaîne en paramètre dans une requête.Comment encoder des symboles en utilisant CGI :: escape

Il fonctionne comme prévu avec le symbole '+', et CGI::escape('foo+bar') renvoie "foo%2Bbar" comme prévu.

Cependant, je rencontre des problèmes avec le symbole '-'. CGI::escape("2015-12-30") renvoie "2015-12-30". Je l'espérais pour retourner "2015%2D12%2D30".

Pour ajouter plus de contexte, je fais une demande à un point final. Dans les spécifications de ce point de terminaison, ils spécifient comment ils attendent de recevoir les paramètres. J'ai l'URL de base et j'ajoute des paramètres à l'URL de base.

Dans les spécifications, ils nécessitent que le paramètre Date '2015-12-30' soit envoyé en tant que "2015%2D12%2D30". C'est pourquoi j'ai besoin d'encoder le symbole -.

+0

Avez-vous déjà une URL ou essayez-vous d'ajouter des valeurs à une URL? Si c'est le cas, CGI n'est pas la bonne bibliothèque à utiliser. URI serait plus utile. –

Répondre

0

utilisation URI, non CGI:

require 'uri' 

uri = URI.parse('http://www.example.com') 
uri.query = URI::encode_www_form(
    'a' => '1+1', 
    'b' => '/path/to/file', 
    'c' => '2015-12-30' 

) 
uri.to_s 
# => "http://www.example.com?a=1%2B1&b=%2Fpath%2Fto%2Ffile&c=2015-12-30" 

Le - est valide et n'a pas besoin d'être codées.

+0

J'ai ajouté un autre contexte expliquant pourquoi j'ai besoin d'encoder le symbole '-'. – srm

+0

Pensez-vous que je devrais gsub le symbole '-' avec ce qu'ils attendent avant de le renvoyer? – srm

+0

Que s'est-il passé quand vous l'avez essayé? –