2013-06-21 43 views
5

Tôi đang tạo một liên kết tạo các tham số URL chứa các liên kết có tham số URL. Vấn đề là tôi có một liên kết như thế nàyCách thoát khỏi mã hóa url?

http://mydomain/_layouts/test/MyLinksEdit.aspx?auto=true&source= 
    http://vtss-sp2010hh:8088/AdminReports/helloworld.aspx?pdfid=193 
&url=http://vtss-sp2010hh:8088/AdminReports/helloworld.aspx?pdfid=193%26pdfname=5.6%20Upgrade 
&title=5.6 Upgrade 

Liên kết này sẽ trỏ tới trang đánh dấu trang đọc thông số này.

auto là Thời tiết để đọc các thông số sau hay không

source được đi đâu sau khi bạn hoàn thành thêm hoặc hủy

url được link bookmark

title là tên của bookmark

Giá trị của urltitle được nhập vào 2 trường. Sau đó, người dùng phải nhấp vào save hoặc cancel. Vấn đề là khi trang dấu trang nhập các giá trị vào trường, nó sẽ giải mã chúng. Sau đó, nếu bạn cố gắng lưu, nó sẽ không cho phép bạn tiết kiệm vì giá trị pdfname trong giá trị url có một khoảng trống trong đó. Nó cần liên kết để không có bất kỳ dấu cách nào. Vì vậy, về cơ bản, tôi muốn nó để sau khi nó đi vào nó trong lĩnh vực này, nó sẽ vẫn là một %20 thay vì một không gian.

Có không phải là một vấn đề với source, auto, hoặc title, chỉ là url ...

Có cách nào để giải quyết này? Giống như một nhân vật thoát đặc biệt mà tôi có thể sử dụng cho %20?

Lưu ý: Tôi không thể sửa đổi trang dấu trang.

Tôi đang sử dụng C#/asp.net để tạo liên kết và truy cập liên kết.

Cảm ơn

Trả lời

0

Chỉ cần sử dụng phương pháp HttpUtilty's UrlEncode ngay trước khi bạn tắt url;

string encoded = HttpUtility.UrlEncode(url); 
8

Vì .NET Framework 4.5 bạn có thể sử dụng WebUtility.UrlEncode.

Nó nằm trong System.dll, do đó, nó không yêu cầu bất kỳ tài liệu tham khảo bổ sung.

Nó đúng cách thoát ký tự cho URL, không giống như Uri.EscapeUriString

Nó không có bất kỳ giới hạn về độ dài của chuỗi, không giống như Uri.EscapeDataString, vì vậy nó có thể được sử dụng cho POST yêu cầu

System.Net.WebUtility.UrlEncode(urlText) 

Một lựa chọn khác là

System.Uri.EscapeDataString() 
+2

Tôi cố gắng này http://msdn.microsoft.com/en-us/library/zttxte6w.aspx, nhưng nó chỉ mã hóa nó như với một '+', mà đã không hoạt động, bởi vì trang dấu trang, giải mã nó. Nhưng tôi đã tìm ra, tôi vừa làm, 'string.replace (" ","% 2520 ");'. Bằng cách này, trang đánh dấu giải mã '% 25' thành'% ', chỉ để lại'% 20' bên trái. – omega

1

Uri.EscapeDataString() và Uri.UnescapeDataString() là an toàn so với các phương pháp/UrlDecode URLEncode và không chuyển đổi ký tự cộng vào dấu cách khi giải mã.

Một số chi tiết từ người dùng khác: http://geekswithblogs.net/mikehuguet/archive/2009/08/16/134123.aspx

+1

Vui lòng giải thích câu trả lời của bạn. Tại thời điểm những gì bạn đã nói là chủ quan bởi vì bạn không giải thích tại sao. Tại sao họ an toàn ... xin hãy giải thích cho tác giả câu hỏi. –

+1

So sánh với phương thức UrlEncode/UrlDecode, Uri.EscapeDataString/Uri.UnescapeDataString không chuyển đổi các ký tự cộng vào dấu cách. (Tôi đã chỉnh sửa bài đăng của mình để làm rõ câu trả lời) – mmosoll