2011-12-16 21 views
5

私はスペースでUrlを持っており、スペースを%20(エスケープ)で置き換えたいと考えています。 UrlPathEncodeはこれを行う必要がありますが、スペースがある下のURLでは動作しません。誰かがそれがなぜ機能しないのか説明できますか?UrlPathEncodeはスペースをエスケープしません

System.Web.HttpUtility.UrlPathEncode("http://a1.quickcatchlabs.com/phototemplates/football_blimp_1.html?i_url=http://lh3.ggpht.com/yf5lVBB_WNBvBHT1HoIzY1SG0-PY5zRCobP3vBacuSk9N346F7CeAIRSFOltR6ZC1-yf-MNKAcAd7bAZ_A=s612-c&i_name=Patriots vs Redskins&i_venue_name=Gillette Stadium &i_venue_address=Foxborough , MA&d_Score_0=34&d_Score_1=27&d_Period_0=Final&p_name_0=Patriots &p_name_1=Redskins"); 
+2

あなたは_パス_をエンコードしようとしていますが、エスケープしたい文字列が_queryのSTRING_です。 – fge

答えて

8

を与えます。 ちょうどパス、ではなく、 URLのクエリ部分。パスにスペースを追加してそのコードを再度実行すると、パス部分のスペースが%20に置き換えられますが、クエリ部分のスペースは表示されません。

UrlPathEncodeへのコールを1からUri.EscapeUriStringに置き換えると、パスだけでなくURL全体が正しくエンコードされます。

1

Uri.EscapeDataStringに電話する必要があります。

+0

これはC#/ javascriptのfrankenlanguageです。 – spender

+0

@spender:いいえ。それはタイプミスです。一定;ありがとう。 – SLaks

0
Uri.EscapeDataString("this is a test") 

名前が示すように、UrlPathEncodeパスをコード

this%20is%20a%20test 
1

あなたの場合、 '?'(url.split( '?'))の文字列を分割します。これは、ベースパスとクエリ文字列を与えます。その後、UrlPathEncode()でベースパスをエンコードし、UrlEncode()でクエリ文字列をエンコードします。次に、両方を追加します。これは問題を解決するだろう。

サンプルコード:

public string EncodeURL(string url) 
{ 
    var encodedURL = new StringBuilder(); 
    var urls = url.Split('?'); 
    encodedUrl.Append(HttpUtility.UrlPathEncode(urls[0])); 
    encodedUrl.Append(HttpUtility.UrlEncode(urls[1])); 

    return encodedUrl.ToString(); 
} 
+0

URLに '?'が含まれていてはなりません(問題ありません)。 – IvanH

+0

その場合は、url.Split(Char []、count)とpass count = 1を使用します。これはあなたの問題を解決するでしょう。 – smhnkmr

+0

これはUrlEncodeがクエリ文字列全体をエスケープするという現在の理解では主な問題ではないため、受け入れページでクエリ文字列が正しく解釈されるときに区切り文字として解釈されません。 – IvanH

関連する問題