SORU
13 Mayıs 2010, PERŞEMBE


'URI arasındaki fark ne.kaçış ve CGI.kaçış?

Farkları ve hangisini kullanmalıyım?

CEVAP
24 EKİM 2012, ÇARŞAMBA


Kullanmam gereken bir balta ve kılıç arasındaki fark nedir? İyibağlıdırne yapmanız gereken.

URI.escape (URL) bir dize kodlamak için, sözde gerekiyordu, "Percent-encoding".

CGI::escape web sunucu ve uygulama arasında veri/kod çözme kodlanmış nasıl olması gerektiğini açıklayan CGI spec, geliyor.

Şimdi, diyelim ki uygulamanızda bir URI kaçmak için ihtiyacınız olduğunu söyleyin. Daha özel bir kullanım durumdur. Bunun için, Ruby toplum yıldır URI.escape kullanılır. URI.escape sorun RFC-3896 spec ele olamazdı.

URI.escape 'http://google.com/foo?bar=at#anchor&title=My Blog & Your Blog' 
# => "http://google.com/foo?bar=at#anchor&title=My Blog & Your Blog"

URI.escape eski olarak işaretlenmiş

Ayrıca geçerli bir URI.kodlamak basit gsub. Ama bence bileşenler için bir URI bölünmüş, her bileşenleri kaçış sonra, ve son olarak onlara katılmak.

Geçerli bir URI.kodlamak zararlı ve itiraz kabul edilir. Bu olacak kaldırılacak veya davranış büyük ölçüde değiştirir.

Şu anda protezi nedir?

Yukarıda, mevcut URİ dediğim gibi.kodlamak spec düzeyde yanlış. Biz bu yüzden tam yedek vermeyecektir. Yerine göre değişir kılıfı kullanın.

http://bugs.ruby-lang.org/issues/show/4167

Ne yazık ki orada değil bir tek kelimeyle ilgili bu dokümanlar, bu konuda kontrol etmek için kaynak, ya da Çalıştır komut ile uyarı ayrıntı düzeyi (-wW2) (ya biraz google-fu).

proposed bazıları ise tüm URI kaçmak imkansızdı, çünkü sorgu parametreleri CGI::Escape kullanmak için:

CGI::escape 'http://google.com/foo?bar=at#anchor&title=My Blog & Your Blog'
# => "http://google.com/foo?bar=at#anchor&title=My Blog & Your Blog"

CGI::escape sorgu parametreleri için kullanılır, ama sonuç yine spec karşı olacak. Aslında en yaygın kullanımı-örnek form verileri, application/x-www-form-urlencoded POST isteği göndermek gibi kaçıyor.

Ayrıca WEBrick::HTTPUtils.escape iyileştirme çok değil bahsedilen (yine sadece olan gsub basit IMO, URI.escape daha kötü bir seçenek bile değil):

WEBrick::HTTPUtils.escape 'http://google.com/foo?bar=at#anchor&title=My Blog & Your Blog'
# => "http://google.com/foo?bar=at#anchor&title=My Blog & Your Blog" 

Spec en yakın Addressable mücevher gibi görünüyor:

require 'addressable/uri'
Addressable::URI.escape 'http://google.com/foo?bar=at#anchor&title=My Blog & Your Blog'
# => "http://google.com/foo?bar=at#anchor&title=My Blog & Your Blog"

Önceki tüm seçenekleri aksine, Adreslenebilir #, kaçış yok ve bu beklenen davranıştır dikkat edin. URI sorgu URİ yolunda değil # karma devam etmek istiyorum.

Tek sorun sol olduğunu bilmiyorduk kaçış sorgu parametreleri düzgün, hangi rüzgar attı bize sonuç: etmemeliyiz kullanın tek bir yöntem için tüm URİ, çünkü orada hiçbir mükemmel bir çözüm (şimdilik). & kaçan olmadı gördüğünüz gibi "Benim Blog Ve Blog". Kullanıcılar URL için özel bir anlamı olan farklı karakterler koyabileceği sorgu parametreler, kaçış için farklı bir biçimde kullanmamız gerekiyor. URL kodlamak girin. Her URL kodlamak için kullanılır "şüpheli", ERB::Util.url_encode ne benzer sorgu değeri:

ERB::Util.url_encode "My Blod & Your Blog"
# => "My Blod & Your Blog""

Sorun değil ama zaten Adresli gerekli ettik:

uri = Addressable::URI.parse("http://www.go.com/foo")
# => #<Addressable::URI:0x186feb0 URI:http://www.go.com/foo>
uri.query_values = {title: "My Blog & Your Blog"}
uri.normalize.to_s
# => "http://www.go.com/foo?title=My Blog & Your Blog"

Sonuç:

  • URI.escape veya benzeri yok
  • Eğer sadece form kaçış gerekiyorsa CGI::escape kullanın
  • Eğer değişik yöntemleri kullanmak Adreslenebilir ile çalışmanız gerekiyorsa, URL kodlama, kodlama formu ve normalleştirir URL bulunmaktadır.
  • Eğer Raylar bir proje, kontrol ise "How do I URL-escape a string in Rails?"

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Elly Awesome

    Elly Awesome

    15 ŞUBAT 2010
  • iMasterful

    iMasterful

    11 EYLÜL 2009
  • The10HourMan

    The10HourMan

    28 EYLÜL 2012