1. ホーム
  2. c#

[解決済み] C#にはJavaScriptのencodeURIComponent()に相当するものはありますか?

2022-04-28 02:14:26

質問

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 があります。 AspNetHostingPermission , AspNetHostingPermissionAttribute および AspNetHostingPermissionLevel .

どのように解決するのですか?

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つの値とは異なります)。