2010-11-10 12 views
21

HttpServerUtility.UrlPathEncode ve HttpServerUtility.UrlEncode arasındaki fark nedir? Ve diğerini ne zaman seçmeliyim?HttpServerUtility.UrlPathEncode vs HttpServerUtility.UrlEncode

+1

olası yinelenen (http://stackoverflow.com/questions/602642/server-urlencode-vs-httputility-urlencode) (cevaplar UrlPathEncode' 'referansları içerir) –

+6

Disagree . Diğer sorunun cevabı UrlPathEncode'a atıfta bulunsa da, soru açıkça aynı değildir. –

+0

Lütfen HttpServerUtility.UrlPathEncode'u kullanmayın. HttpServerUtility.UrlEncode –

cevap

17

Güncelleştirme: MSDN başvurusu başına 4.5, Microsoft tarafından UrlEncode kullanılmasını önerir. Ayrıca, daha önce MSDN'de listelenen bilgiler iki yöntemin davranışını tam olarak açıklamamaktadır - yorumlara bakın.

Aradaki fark kaçıyor - UrlEncode onları + işaretine kaçıyor, UrlPathEncode% 20'ye kaçıyor. + ve% 20, yalnızca QueryString bölümü per W3C'un parçasıysa eşdeğerdir. Yani, + işaretini, yalnızca querystring bölümünü kullanarak tüm URL'den kaçamazsınız. Alt satırda UrlPathEncode Sen UrlEncode() yöntemiyle veya UrlPathEncode() metodu ile kullanarak bir URL kodlamak hep

imho iyi olduğudur. Ancak, yöntemler farklı sonuçlar döndürür. UrlEncode() yöntemi, her boşluk karakterini artı karakterine (+) dönüştürür. UrlPathEncode() yöntemi, her boşluk karakterini onaltılık gösterimde bir alanı temsil eden "% 20" dizesine dönüştürür. Herhangi bir platformun veya tarayıcının kod çözmeyi gerçekleştirmesine bakılmaksızın, tutarlı bir kodu çözülmüş URL'yi garanti etmek için URL'nin yol bölümünü kodlarken, UrlPathEncode() yöntemini kullanın.

http://msdn.microsoft.com/en-us/library/4fkewx0t.aspx

+19

'u kullanmanız gerekir. Belgelerin gerçekten bunu netleştirmesine rağmen, aslında yalnızca alanların işlenmesinden daha fazla fark vardır. UrlEncode, "?" Gibi karakterleri kodlayacak ve UrlPathEncode tarafından yok sayılan "&". Ayrıca bkz. Http://connect.microsoft.com/VisualStudio/feedback/details/551839/error-in-documentation-for-httpserverutility-urlpathencode –

+8

Ayrıca UrlPathEncode, "?" Ifadesinin ilk oluşumundan sonra hiçbir şeyi kodlamaz. Geri kalanının sorgu dizesi olduğunu varsayar ve sorgu dizesinin zaten kodlanmış olduğunu varsayar. –

+0

Yani temelde UrlPathEncode sorgu dizesi dışında her şey için kullanılmalıdır? – TheGateKeeper

23

UrlEncode (her =, sağ, sol ya da özellikle çok) sorgu dizisi değerleri için yararlıdır. bu url olarak

, foo, fooval, bar ve barval HER ayrı UrlEncode'd edilmelidir:

http://www.example.com/whatever?foo=fooval&bar=barval

UrlEncode şeyi kodlar, böyle % -style kodlamasına, &, = ve /, aksanlı veya diğer ASCII olmayan karakterler vb. + olarak kodlar. Bu form-tarzı kodlamadır ve (& gibi) url'nin kontrol karakterleri ile tüm jiggy almadan bir sorgu olarak querystring koymak (ya da bir URL'de iki eğik çizgi arasında) için bir şey için en iyisidir. Aksi halde maalesef & veya = kullanıcının form girişinde veya db değeri değerinde bir şeyler kırılabilir.

DÜZENLEME: Uri.EscapeDataString UrlEncode çok yakın maç olduğunu ve kesin farklılıkları bilmiyorum ama, tercih edilebilir.

UrlPathEncode, sorgu dizesinin geri kalanı için kullanışlıdır, herşeyi soldaki herşeyi etkiler.

Bu URL'de, tüm URL (http'dan barval'a) UrlPathEncode yoluyla çalıştırılmalıdır.

http://www.example.com/whatever?foo=fooval&bar=barval

UrlPathEncode kodlamak DEĞİLDİR?, &, = veya /.Ancak, UrlEncode gibi,% notasyonu ile aksanlı/ASCII olmayan karakterleri kodlar ve boşluk da% 20 olur. Bu, boşlukların ve aksanlı karakterlerin bulunmadığından, URL'nin geçerli olduğundan emin olmak için kullanışlıdır. Sorgusuza dokunmayacak (her şey sağda olacak mı?), Bu nedenle yukarıdaki URL ile kodlamak zorundasınız. [HttpUtility.UrlEncode genel Server.URLEncode] arasında

+2

+1 Bu doğru cevaptır. – Zano

+2

UrlPathEncode özünde buggy; doğru şekilde çalışamaz. URL'yi düşünün http://example.com/really?-unexpected-truths?id=3&user=eamon & co' Amaç, ilk soru işaretinin url'nin bir parçası olduğu ve ikincisinin uri'sinin sınırlayıcısı olduğu yönündedir. bileşen, ama bilmenin bir yolu yok. Ve amaç yine ilk '&' bir sınırlayıcı olmak ve ikincisi de içerik olmaktır… ama yine de bilmenin bir yolu yoktur. Kodlamanın * tüm noktası *, verilerin, alttaki biçim tarafından kullanılan özel kontrol karakterlerini içerebilmesidir, böylece * bu şekilde kodlayamazsınız. –

+1

'UrlEncode' basitçe standart olmayan, EscapeDataString'in eski bir sürümüdür. Bunun yerine kullanın; Oluşturulan uri'nin güvenilir taşınabilirliğini istiyorsanız, 'UrlEncode' kullanmayın. –

İlgili konular