2008-09-17 22 views
87

C#にはJavaScriptのencodeURIComponent()と同等の機能がありますか? JavaScriptで

encodeURIComponent("©√") == "%C2%A9%E2%88%9A" 

は、C#アプリケーションの等価はありますか? HTML文字をエスケープするために私が使用:

txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]", 
    m => @"&#" + ((int)m.Value[0]).ToString() + ";"); 

しかし、私はJSが使用する正しい進形式に試合を変換するかどうかはわかりません。たとえば、次のコード:。。

txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]", 
    m => @"%" + String.Format("{0:x}", ((int)m.Value[0]))); 

返し」"©√"の代わり"%C2%A9%E2%88%9A"ため%a9%221a"私はバイトか何かにアップ文字列を分割する必要があるように見えます

編集:これは、Windowsアプリケーションのためです、 System.Webで利用可能な唯一のアイテムは以下の通りです。AspNetHostingPermissionAspNetHostingPermissionAttribute、およびAspNetHostingPermissionLevel

答えて

144

Uri.EscapeDataStringまたはHttpUtility.UrlEncodeは、URLの一部であることを意図した文字列をエスケープする正しい方法です。文字列"Stack Overflow"例えば

テイク:

  • HttpUtility.UrlEncode("Stack Overflow") - >"Stack+Overflow"

  • Uri.EscapeUriString("Stack Overflow") - >"Stack%20Overflow"

  • Uri.EscapeDataString("Stack + Overflow") - >また、エンコード"+" to "%2b" ---->Stack%20%2B%20%20Overflow

URLの実際の一部として使用される場合にのみ、最後後者 が正しい(クエリ文字列パラメータの一つの値ではなく)

+0

私が持っていた主な問題は、私の溶液中でのSystem.Webへの参照を持っていなかったが、私は、感謝EscapeUriStringの知りませんでした! – travis

+42

encodeURIComponent()とは対照的に、Uri.EscapeUriString()は "+"を "%2b"にエンコードしません。代わりにUri.EscapeDataString()を使用してください。 – jwaliszko

+0

@Steve Uri.EscapeDataStringは今日の日を保存しました;) – InferOn

16

HttpUtility.HtmlEncode /デコード
HttpUtility.UrlEncode /デコード

あなたはそれがあなたのプロジェクトに

+0

私はより具体的なてきたはずです。これは、Windowsアプリのために、アイテムのみ使用可能ですAspNetHostingPermission、AspNetHostingPermissionAttribute、およびAspNetHostingPermissionLevelです。 – travis

+4

System.Webアセンブリへの参照を追加することができます –

+0

私はそれを実感しました、ありがとう! – travis

5

利用できない場合は、のSystem.Web名前空間

Server.UrlEncode、Server.UrlDecode、サーバーにサーバーオブジェクトを使用することができますSystem.Webアセンブリへの参照を追加することができます。 HtmlEncode、およびServer.HtmlDecodeです。

編集:ポスターは、これはWindowsアプリケーションであり、Webアプリケーションではないと信じています。上記の項目は、プロジェクトへの参照として追加する必要があるSystem.Web内のHttpUtilityクラスから使用できます。

+0

サーバーアプリケーションはWindowsアプリケーションからアクセスできません – travis

9

Serverオブジェクトにアクセスできない場合は、Server.UrlEncode()またはSystem.Web.HttpUtility.UrlEncode()を試してください。 System.Uri.EscapeUriString()を使用して、System.Webアセンブリへの参照を追加しないようにすることもできます。

+1

Uri.EscapeUriString()は私のために何もしませんでしたが、Uri.EscapeDataString()を使用して文字列を適切にurl-encodeできました。 –

+1

@TolandHon:確かに。その理由は、 'Uri.EscapeUriString()'はJavaScriptの 'encodeURI()'に対応しています。これはURI予約文字を保持します。 '/'、 '&'、... as-is(プラス '#')のように、あなたが発見したように、JavaScriptの 'encodeURIComponent()'に対応する 'Uri.EscapeDataString()'です。 – mklement0

9

System.Uri.EscapeUriString()は何もしていないようですが、System.Uri.Escape データ String()が私のために働いていました。

13

IのためのJavaScriptのencodeURIComponentでの完全な互換性アナログを実行しようとしました

string a = "[email protected]#$%^&*()_+ some text here али мамедов баку"; 
a = System.Web.HttpUtility.UrlEncode(a); 
a = a.Replace("+", "%20"); 

結果は次のとおりです:! %40%23%24%25%5E%26 *()_%2B%、C#と私の4時間の実験の後、私はこの

C#のコードを見つけました20so b2%d0%b0%d0%b0%d0%b0%d0%b4%d0%be%d0%b2%d0%b0%d0%b0%d0% 20%d0%b1%d0%b0%d0%ba%d1%83

これをJavascriptのdecodeURLComponent()でデコードした後、

あなたは、この取得します:! を@の#$%^ & *()_ +ここではいくつかのテキストがалимамедовбаку

は、あなたが勝った、Windowsストアアプリを注意

+1

+1は質問の"等価 "という言葉を尊重します。私はいくつかのJavaScriptアルゴリズムをVB.NETに変換していましたが、この回答は役に立ちました。 – Fuhrmanator

+1

動作しますが、あなたは、単に '代わりに( "алимамедовбакуここに!@の#$%^&*()_ +いくつかのテキスト")' Uri.EscapeDataStringを使用することができます。 – mklement0

4

ためにありがとうございましたHttpUtilityを持っています。代わりに、あなたが持っている:

をURIについては、前に '?':

  • システム。 Uri.EscapeUriString( "example.com/Stack Overflow ++?")
    • - > "example.com/Stack%20Overflow+++?"
    • URIのクエリ名または値の

、後に '?':

  • システム。

    :POSTコンテンツ内x-www-form-urlencodedクエリ名または値について> "スタック%20Overflow%2B%2B"

、 - Uri.EscapeDataString( "スタックオーバーフロー++")

    • System.Net。 WebUtility。URLENCODE( "スタックオーバーフロー++")
      • - > "スタック+オーバーフロー%2B%2Bの"
関連する問題