2009-12-02 6 views
1

현재 CMS를 개발 중이며 URL에 특수 문자를 좋은 방법으로 인코딩하려고합니다. Rack :: Utils.escape을 사용하고 싶지 않습니다.URL을 인코딩하는 가장 좋은 방법은 무엇입니까?

멋진 보석이 있습니까?

안부

+3

왜'랙 :: Utils.escape'은 ... 사람들이 더 나은 제안을 도움이 될 수 있습니다 그것은 추한 URL을 생성 – ceejayoz

+0

받아 들일 수없는 것입니다. – brainfck

+1

아래의 귀하의 의견과 귀하가 수락 한 답변을 바탕으로 귀하의 질문에 대한 오해의 소지가 있습니다. 특수 문자를 "인코딩"하지 않고 일반 ASCII로 "변환"합니다. – ScottJ

답변

3

봐, 그것은 심지어 레일없이 사용할 수 있습니다 볼 수 있지만 일부 포함되어 있습니다 (레일을 사용하여) 사용하기가 더 쉬워졌습니다.

1

루비의 CGI 라이브러리는 당신이 필요로하는 무엇을 수행해야합니다,

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

가 stringex 보석 here에서 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 
관련 문제