it-swarm-id.com

Apakah C # memiliki setara dengan encodeURIComponent () JavaScript?

Dalam JavaScript:

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

Apakah ada yang setara untuk aplikasi C #? Untuk keluar dari karakter HTML yang saya gunakan:

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

Tapi saya tidak yakin bagaimana mengkonversi kecocokan ke format heksadesimal yang benar yang digunakan JS. Misalnya kode ini:

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

Pengembalian "%a9%221a" untuk "©√" dari pada "%C2%A9%E2%88%9A". Sepertinya saya perlu membagi string menjadi byte atau sesuatu.

Sunting: Ini untuk aplikasi windows, satu-satunya item yang tersedia di System.Web adalah: AspNetHostingPermission, AspNetHostingPermissionAttribute, dan AspNetHostingPermissionLevel.

122
travis

Uri.EscapeDataString Atau HttpUtility.UrlEncode Adalah cara yang tepat untuk keluar dari string yang dimaksudkan sebagai bagian dari URL.

Ambil contoh string "Stack Overflow":

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

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

  • Uri.EscapeDataString("Stack + Overflow") -> Juga mengkodekan "+" to "%2b" ----> Stack%20%2B%20%20Overflow

Hanya yang terakhir yang benar ketika digunakan sebagai bagian sebenarnya dari URL (yang bertentangan dengan nilai salah satu parameter string kueri)

195
Steve

HttpUtility.HtmlEncode/Dekode
HttpUtility.UrlEncode/Dekode

Anda dapat menambahkan referensi ke System.Web Bersidang jika tidak tersedia di proyek Anda

19
David Thibault

Saya mencoba melakukan analog kompatibel penuh dari kode javascript encodeURICon untuk c # dan setelah 4 jam percobaan saya menemukan ini

c # KODE:

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

hasilnya adalah: !% 40% 23% 24% 25% 5e% 26 * () _% 2b% 20beberapa% 20teks% 20di sini% 20% d0% b0% d0% bb% d0% b8% 20% d0% bc% d0% b0% d0% bc% d0% b5% d0% b4% d0% menjadi% d0% b2% 20% d0% b1% d0% b0% d0% ba% d1% 8

Setelah Anda mendekode dengan Javascript's decodeURLComponent ();

anda akan mendapatkan ini: ! @ # $% ^ & * () _ + beberapa teks di sini али мамедов баку

Terima kasih atas perhatian Anda

16
Ali Mamedov

System.Uri.EscapeUriString () tampaknya tidak melakukan apa-apa, tetapi System.Uri.Escape Data String () bekerja untuk saya.

11
Echilon

Coba Server.UrlEncode(), atau System.Web.HttpUtility.UrlEncode() untuk instance ketika Anda tidak memiliki akses ke objek Server. Anda juga dapat menggunakan System.Uri.EscapeUriString() untuk menghindari menambahkan referensi ke System.Web Majelis.

9
Billy Jo

Untuk Aplikasi Windows Store, Anda tidak akan memiliki HttpUtility. Sebaliknya, Anda memiliki:

Untuk URI, sebelum '?':

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

Untuk nama atau nilai kueri URI, setelah '?':

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

Untuk x-www-form-urlencoded nama atau nilai permintaan, dalam konten POST:

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

Anda bisa menggunakan objek Server di namespace System.Web

Server.UrlEncode, Server.UrlDecode, Server.HtmlEncode, dan Server.HtmlDecode.

Sunting: poster menambahkan bahwa ini adalah aplikasi windows dan bukan aplikasi web seperti yang diyakini. Item yang tercantum di atas akan tersedia dari kelas HttpUtility di dalam System.Web yang harus ditambahkan sebagai referensi ke proyek.

6
Mitchel Sellers