Mari kita lihat dua URL berikut, apakah mereka melewati parameter yang sama? aaa.aspx?tag=.net%bc%bc%ca%f5 aaa.aspx?tag=.net%e6%8a%80%e6%9c%af
Tampaknya berbeda, tetapi pada kenyataannya, mereka semua menggunakan UrlEncode untuk "teknologi .net", tetapi satu adalah pengkodean GB2312 dan yang lainnya adalah pengkodean Utf-8. Kode berikut dapat memperoleh efek pengkodean di atas:
string tmp1 = System.Web.HttpUtility.UrlEncode(".net technology", System.Text.Encoding.GetEncoding("GB2312")); string tmp2 = System.Web.HttpUtility.UrlEncode(".net technology", System.Text.Encoding.UTF8);
Halaman web kami yang sebenarnya dapat dipanggil oleh program lain. Misalnya, Mandarin Menyederhanakan halaman ASP pada sistem operasi perlu meneruskan parameter Mandarin ke halaman ASP.net. Secara default, pada sistem operasi Sederhana Cina, metode Server.UrlEncode ASP akan mengkodekan bahasa Cina dengan pengkodean GB2312. Tetapi secara default, halaman ASP.net dikodekan dalam UTF-8. Dalam hal ini, ketika Anda menggunakan Request.QueryString["Tag"] untuk menerima nilai, Anda tidak akan dapat menerima informasi Cina, dan Anda akan melihat karakter kacau dalam debugging langkah demi langkah. Saat ini, meskipun Request.QueryString["Tag"] diterima dengan karakter yang kacau, URL saat ini tidak kacau.
Solusinya adalah menganalisis parameter dalam URL sendiri, lalu mendekripsi nilai parameter sesuai dengan pengkodean GB2312, alih-alih menggunakan pengkodean UTF-8 default .net. Faktanya, Microsoft juga menyediakan fungsi yang sesuai, jadi kita tidak perlu menggunakan ekspresi reguler untuk menganalisis string URL sendiri.
Kode demonya adalah sebagai berikut:
string q = Permintaan.Url.Kueri;
System.Collections.Specialized.NameValueCollection nv = System.Web.HttpUtility.ParseQueryString(q, System.Text.Encoding.GetEncoding("GB2312")); Response.Write(nv["Tag"]);
Mari kita gunakan .NET Reflector Lutz Roeder untuk melihat implementasi metode System.Web.HttpUtility.ParseQueryString: Jika kita terus memeriksa kembali, kita dapat melihat bahwa kode yang akhirnya menangani analisis string parameter URL adalah sebagai berikut:
Fungsi berikut dari kelas System.Web.HttpValueCollection mengimplementasikan penguraian parameter URL Di sini kita melihat bahwa itu adalah analisis yang dilakukan oleh setiap karakter.
Adapun metode pengkodean seperti apa yang diteruskan pihak lain kepada kita, yang terbaik adalah meneruskannya sebagai parameter, sehingga kita dapat mendekripsinya sesuai dengan parameter pengguna ini. |