'URI arasındaki fark ne.kaçış ve CGI.kaçış?
Farkları ve hangisini kullanmalıyım?
CEVAP
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.
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?"
Px, dp, arasındaki fark ve Android dip...
'dizi arasındaki fark ne ve dize?...
İÇ ve DIŞ birleşimler arasındaki fark...
Bir URI, URL ve URN arasındaki fark ne...
Aramak ve uygulamak arasındaki fark ne...