2009-12-02 2 views
1

В настоящее время я разрабатываю CMS и хочу с легкостью кодировать специальные символы в URL-адресе. Я не хочу использовать Rack :: Utils.escape.Лучший способ кодирования URL-адресов?

Есть ли в наличии прохладный драгоценный камень?

С наилучшими пожеланиями

+3

Объясняя, почему 'Rack :: Utils.escape' неприемлем может помочь людям дать лучшие предложения ... – ceejayoz

+0

Это создает уродливые URL. – brainfck

+1

На основании ваших комментариев ниже и вашего принятого ответа ваш вопрос вводит в заблуждение. Вы не хотите «кодировать» специальные символы, а скорее «конвертировать» их в обычный ascii. – ScottJ

ответ

3

Посмотрите на stringex драгоценный камень here, он может быть использован даже без рельсов, но содержит некоторые чтобы облегчить его использование (с рельсами).

1

библиотека CGI в Ruby должны делать то, что вам нужно:

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

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

+0

чувак, это действительно уродливый URL-адрес, и я уже объяснил, что я не хочу его использовать. - Rack :: Utils.escape делает то же самое, что и CGI. – brainfck

+0

Это не ошибка библиотеки, что URL-адрес уродливый. Вам нужны специальные символы, закодированные в URL-адресе, это будет уродливо. – ScottJ

+0

Я не уверен, что вы ищете, тогда кодирование «не уродливым способом» на самом деле ничего не значит для меня. Можете ли вы привести примеры? – Lytol

0

Ну, я обычно использую удобный на заказ метод, называемый String.to_slug. Надеюсь, вы сочтете это полезным.

Вызвать этот /lib/to_slug.rb и включить его в один инициализатор или включить его только в модель, которая генерирует 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 
Смежные вопросы