2009-12-02 6 views
1

Je suis en train de développer un CMS et je souhaite encoder des caractères spéciaux dans l'URL de manière agréable. Je ne veux pas utiliser Rack :: Utils.escape.La meilleure façon d'encoder les URL?

Y a-t-il déjà une gemme cool disponible?

Meilleures salutations

+3

Expliquer pourquoi 'rack :: Utils.escape' est inacceptable peut aider les gens à donner de meilleures suggestions ... – ceejayoz

+0

Il crée des URL laid. – brainfck

+1

Selon vos commentaires ci-dessous et votre réponse acceptée, votre question est trompeuse. Vous ne voulez pas "encoder" des caractères spéciaux, mais plutôt les "convertir" en ascii. – ScottJ

Répondre

3

Regardez le joyau de stringex here, il peut être utilisé même sans rails, mais contient quelques-uns des choses pour le rendre plus facile à utiliser (avec des rails).

1

bibliothèque CGI Ruby devrait faire ce que vous avez besoin:

url_encoded_string = CGI::escape("'Stop!' said Fred") 
# => "%27Stop%21%27+said+Fred" 

Voir http://ruby-doc.org/core/classes/CGI.html

+0

mec, c'est une URL vraiment moche et j'ai déjà expliqué que je ne veux pas utiliser ce - Rack :: Utils.escape fait la même chose que CGI – brainfck

+0

Ce n'est pas la faute de la bibliothèque que l'URL est moche. Vous voulez des caractères spéciaux encodés dans l'URL, ça va être moche. – ScottJ

+0

Je ne suis pas sûr de ce que vous cherchez alors - encoder dans un "non-laid" ne signifie vraiment rien pour moi. Pouvez-vous donner des exemples? – Lytol

0

Eh bien, j'utilise normalement une méthode sur mesure pratique appelée String.to_slug. J'espère que tu trouves cela utile.

Appelez /lib/to_slug.rb et incluez-le dans un initialiseur, ou incluez-le uniquement dans le modèle qui génère les URL.

String.class_eval do 

    #converts accented letters into ascii equivalents (eg. ñ becomes n) 
    def normalize 
    #this version is in the forums but didn't work for me 
    #chars.normalize(:kd).gsub!(/[^\x00-\x7F]/n,'').to_s 
    mb_chars.normalize(:d).gsub(/[^\x00-\x7F]/n,'').to_s 
    end 

    #returns an array of strings containing the words on a string 
    def words 
    gsub(/\W/, ' ').split 
    end 

    #convert into a nice url-ish string 
    def to_slug(separator='-') 
    strip.downcase.normalize.words.join(separator) 
    end 

end 
Questions connexes