Làm cách nào để giải mã tham số URL bằng C #?


146

Làm cách nào để giải mã tham số URL được mã hóa bằng C #?

Ví dụ: lấy URL này:

my.aspx?val=%2Fxyz2F

Câu trả lời:



288
string decodedUrl = Uri.UnescapeDataString(url)

hoặc là

string decodedUrl = HttpUtility.UrlDecode(url)

Url không được giải mã hoàn toàn với một cuộc gọi. Để giải mã đầy đủ, bạn có thể gọi một trong các phương thức này trong một vòng lặp:

private static string DecodeUrlString(string url) {
    string newUrl;
    while ((newUrl = Uri.UnescapeDataString(url)) != url)
        url = newUrl;
    return newUrl;
}

13
Uri.UnescapeDataString (url) thanx
themhz

@ogi Cảm ơn vì điều đó! Tôi không biết nó không hoạt động hoàn toàn chỉ với một cuộc gọi! Tôi đã chạy Uri.UnescapeDataStringhai lần và có được những gì tôi muốn !! : D
C0NFUS3D

2
IMHO tốt hơn câu trả lời được tích lũy bởi vì đề xuất đầu tiên của bạn cũng hoạt động trong Libaries Class Portable (PCLs)
Daniel Veihelmann

2
câu trả lời tốt nhất! nhưng hãy xem xét cách các thông số của bạn được lồng vào nhau trước khi bạn giải mã hoàn toàn. ví dụ: một giá trị param có thể là một URL được mã hóa mà chính nó có một param với một URL được mã hóa khác, Nếu bạn giải mã hoàn toàn nó trong một lần, bạn sẽ không thể biết đó là gì nữa. nó sẽ giống như kéo tất cả các parens ra khỏi một câu lệnh đại số. a = ((b + c) * d) nếu bạn hoàn toàn bỏ qua nó, ý nghĩa của các thành phần có thể bị mất a = b + c * d
DanO

2
UnescapeDataString là không đủ vì nó sẽ không xử lý một số trường hợp (ví dụ: tham số trong URL có chứa khoảng trắng sử dụng '+' nhưng UnescapeDataString không cố ý chuyển đổi chúng thành khoảng trắng). Uri không chỉ xử lý URL, vì câu hỏi đang hỏi về URL, chúng ta nên sử dụng HttpUtility.UrlDecode
Lorenz03Tx


23

Thử cái này:

string decodedUrl = HttpUtility.UrlDecode("my.aspx?val=%2Fxyz2F");

21

Thử:

var myUrl = "my.aspx?val=%2Fxyz2F";
var decodeUrl = System.Uri.UnescapeDataString(myUrl);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.