2 votes

Rails 3.1: Problèmes d'encodage URL avec des points (.)

J'ai un site où lorsque un utilisateur recherche un artiste, une chanson ou un album et clique sur rechercher, les résultats de la recherche sont affichés. Les termes de recherche individuels sont alors définis pour être cliquables, ce qui signifie qu'ils utilisent leurs propres chemins (ou routes) pour générer des liens.

Le problème auquel je continue de me heurter est celui des caractères étranges apparaissant dans certains noms d'artistes, chansons ou albums (comme des points (.)). Y a-t-il un moyen de les encoder en URL?

Voici mon code actuel :

<% artists[0..5].each do |art| %>
                        <%= link_to "#{art}", artist_path(CGI::escape(art)) %>
                <% end %>

2voto

rickypai Points 1000

Supposez que vous avez un nom d'album appelé "slash@^[]/=hi?qqq=123"

encoded = URI.escape str_to_be_encoded

encoded = URI.escape(str_to_be_encoded, Regexp.new("[^#{URI::PATTERN::UNRESERVED.gsub('.','')}]"))

Le premier serait encodé en

"slash@%5E[]/=hi?qqq=123"

Le second serait encodé en

"slash%40%5E%5B%5D%2F%3Dhi%3Fqqq%3D123"

En gros, la plupart des méthodes d'encodage d'URL ne vont pas échapper les caractères qu'ils considèrent comme faisant partie d'une valeur d'URL, donc des symboles comme le signe égal et le point d'interrogation ne sont pas échappés.

La deuxième méthode dit à la fonction d'échappement d'échapper également les caractères légaux dans une URL. Vous obtenez donc une chaîne encodée de meilleure qualité.

Vous pouvez ensuite l'ajouter à votre URL comme ceci

"http://localhost:3000/albums/1-#{encoded}"

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X