web-dev-qa-db-ja.com

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が使用する正しい16進形式に一致を変換する方法がわかりません。たとえば、次のコード:

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

返却値 "%a9%221a" ために "©√" の代わりに "%C2%A9%E2%88%9A"。文字列をバイトなどに分割する必要があるようです。

編集:これはWindowsアプリ用で、System.Webは、AspNetHostingPermissionAspNetHostingPermissionAttribute、およびAspNetHostingPermissionLevelです。

122
travis

_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の実際の部分として使用する場合は、最後のもののみが正しい(クエリ文字列パラメーターの1つの値とは対照的に)

195
Steve

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

プロジェクトで使用できない場合は、System.Webアセンブリへの参照を追加できます

19
David Thibault

私はc#用のjavascriptのencodeURIComponentの完全な互換性のあるアナログをやろうとしましたが、4時間の実験の後、これを見つけました

c#コード:

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

結果は!%40%23%24%25%5e%26 *()_%2b%20some%20text%20here%20%d0%b0%d0%bb%d0%b8%20% d0%bc%d0%b0%d0%bc%d0%b5%d0%b4%d0%be%d0%b2%20%d0%b1%d0%b0%d0%ba%d1%8

JavascriptのdecodeURLComponent()でデコードした後;

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

清聴ありがとうございました

16
Ali Mamedov

System.Uri.EscapeUriString()は何もしないようでしたが、System.Uri.Escape Data String()は私のために働きました。

11
Echilon

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

9
Billy Jo

Windowsストアアプリの場合、HttpUtilityはありません。代わりに、次のものがあります。

URIの場合、「?」の前:

  • System。Uri.EscapeUriString( "example.com/Stack Overflow ++?")
    • -> "example.com/Stack%20Overflow++?"

URIクエリ名または値の場合、「?」の後:

  • System。Uri.EscapeDataString( "Stack Overflow ++")
    • -> "Stack%20Overflow%2B%2B"

x-www-form-urlencoded クエリ名または値の場合、POST content:

  • System.Net。WebUtility.UrlEncode( "Stack Overflow ++")
    • -> "Stack + Overflow%2B%2B"
6
Cœur

System.Web名前空間でServerオブジェクトを使用できます

Server.UrlEncode、Server.UrlDecode、Server.HtmlEncode、およびServer.HtmlDecode。

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

6
Mitchel Sellers