ฉันจะถอดรหัสพารามิเตอร์ URL โดยใช้ C # ได้อย่างไร


146

ฉันจะถอดรหัสพารามิเตอร์ URL ที่เข้ารหัสโดยใช้ C # ได้อย่างไร

ตัวอย่างเช่นใช้ URL นี้:

my.aspx?val=%2Fxyz2F

คำตอบ:



288
string decodedUrl = Uri.UnescapeDataString(url)

หรือ

string decodedUrl = HttpUtility.UrlDecode(url)

URL ไม่ได้รับการถอดรหัสอย่างสมบูรณ์ด้วยการโทรเพียงครั้งเดียว หากต้องการถอดรหัสอย่างสมบูรณ์คุณสามารถเรียกใช้หนึ่งในวิธีนี้ในลูป:

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 ขอบคุณสำหรับสิ่งนั้น! ฉันไม่รู้ว่ามันใช้งานไม่ได้กับสายเดียว! ฉันวิ่งUri.UnescapeDataStringสองครั้งและได้สิ่งที่ฉันต้องการ !! : D
C0NFUS3D

2
IMHO ดีกว่าคำตอบที่ถูกต้องเนื่องจากข้อเสนอแนะแรกของคุณยังใช้งานได้ใน Portable Class Libaries (PCLs)
Daniel Veihelmann

2
คำตอบที่ดีที่สุด! แต่ให้พิจารณาว่า params ของคุณซ้อนกันอย่างไรก่อนที่คุณจะทำการถอดรหัส เช่นค่าพารามิเตอร์อาจเป็น URL ที่เข้ารหัสซึ่งตัวเองมีพารามิเตอร์ที่มี URL ที่เข้ารหัสอื่นหากคุณถอดรหัสอย่างสมบูรณ์ในครั้งเดียวคุณจะไม่สามารถบอกได้ว่าอะไรคือสิ่งที่อีกต่อไป มันจะเป็นเหมือนการขว้างปา parens ทั้งหมดออกจากคำสั่งพีชคณิต a = ((b + c) * d) ถ้าคุณ unescape เต็มความหมายขององค์ประกอบสามารถหายไป a = b + c * d
DanO

2
UnescapeDataString ไม่เพียงพอเนื่องจากจะไม่รองรับหลายกรณี (ตัวอย่างเช่นพารามิเตอร์ใน URL ที่มีการใช้ช่องว่าง '+' แต่ UnescapeDataString โดยเจตนาจะไม่แปลงเป็นช่องว่าง) Uri จัดการมากกว่าแค่ URL เนื่องจากคำถามถามเกี่ยวกับ URL เราควรใช้ HttpUtility.UrlDecode
Lorenz03Tx



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.