2009-02-18 32 views
18

Tôi cần chuyển hướng đến một url chuyển một tham số dưới dạng chuỗi truy vấn.ASP.Net URLEncode Ampersand để sử dụng trong Chuỗi truy vấn

Điều này có thể bao gồm Dấu vị trí trong giá trị. như

string value = "This & That"; 
Response.Redirect("http://www.example.com/?Value=" + Server.UrlEncode(value)); 

này tuy nhiên trả http://www.example.com/?Value=This+&+That

Những gì tôi nên sử dụng để mã hóa chuỗi này?

EDIT: Cảm ơn Luke đã chỉ ra điều hiển nhiên, mã thực sự hoạt động chính xác. Tôi xin lỗi, câu hỏi của tôi không phải là một câu hỏi hợp lệ.

Trang tôi sẽ có rất nhiều mã cũ cũ mà dường như đang làm một số loại mã hóa và giải mã chính nó làm cho nó xuất hiện như thể urlencode của tôi không hoạt động.

Rất tiếc, giải pháp của tôi là sử dụng hoàn toàn & cho đến khi mã được đề cập có thể được viết lại. Bạn không chỉ ghét mã cũ!

Trả lời

24

documentation gợi ý rằng Server.UrlEncode nên xử lý ký hiệu chính xác.

Tôi vừa mới kiểm tra mã chính xác của bạn và chuỗi trả lại được mã hóa một cách chính xác:

http://www.example.com/?Value=This+%26+That

+0

Bạn hoàn toàn chính xác! Trang tôi đang sử dụng sẽ có rất nhiều mã cũ, đó là việc làm một cách mã hóa và giải mã chính nó làm cho nó xuất hiện như thể url url của tôi không hoạt động. Điều này hoạt động chính xác .. như nó phải !! –

+2

Trong trường hợp bạn không có biến Server, bạn cũng có thể truy cập các phương thức urlencode/urldecode thông qua System.Web.HttpUtility –

+1

Lưu ý cho những người khác truy cập trang này; nếu bạn không ở trong một ứng dụng ASP (và do đó không có quyền truy cập vào 'Server'), bạn có thể sử dụng' System.Web.HttpUtility.UrlEncode'. –

13

Về mặt kỹ thuật thực hiện:

value = value.Replace("&", "%26") 

sẽ làm các trick.

EDIT: Dường như có một số vấn đề phức tạp với toàn bộ phương thức UrlEncode/HttpEncode không hoàn toàn thực hiện thủ thuật. Tôi đã viết lên một phương pháp đơn giản trong khi đó lại có thể có ích. Điều này sẽ bao gồm tất cả các vấn đề mã hóa chính, và nó dễ dàng để viết một "desanitizer" là tốt.

Protected Function SanitizeURLString(ByVal RawURLParameter As String) As String 

     Dim Results As String 

     Results = RawURLParameter  

     Results = Results.Replace("%", "%25") 
     Results = Results.Replace("<", "%3C") 
     Results = Results.Replace(">", "%3E") 
     Results = Results.Replace("#", "%23") 
     Results = Results.Replace("{", "%7B") 
     Results = Results.Replace("}", "%7D") 
     Results = Results.Replace("|", "%7C") 
     Results = Results.Replace("\", "%5C") 
     Results = Results.Replace("^", "%5E") 
     Results = Results.Replace("~", "%7E") 
     Results = Results.Replace("[", "%5B") 
     Results = Results.Replace("]", "%5D") 
     Results = Results.Replace("`", "%60") 
     Results = Results.Replace(";", "%3B") 
     Results = Results.Replace("/", "%2F") 
     Results = Results.Replace("?", "%3F") 
     Results = Results.Replace(":", "%3A") 
     Results = Results.Replace("@", "%40") 
     Results = Results.Replace("=", "%3D") 
     Results = Results.Replace("&", "%26") 
     Results = Results.Replace("$", "%24") 

     Return Results 

End Function 
+1

tôi đang hy vọng một điều gì đó khác ... được xây dựng trong ... –

+0

Đồng ý. "&" là ký tự dành riêng trong URL và do đó sẽ không được mã hóa URL. –

+0

Về mặt kỹ thuật, bạn chỉ cần 'Vệ sinh' các dấu gạch chéo, ký hiệu và dấu chấm hỏi. URLEncode sẽ làm phần còn lại. –

2

Một nhân vật mà cần thoát là dấu nháy đơn. Thay thế nó bằng% 27.

string url = Server.UrlEncode(value).Replace("'", "%27);

HttpUtility.UrlEncode() Và Server.UrlEncode() không thay thế nhân vật này cùng với một vài người khác để tương thích ngược với Khung Net khác. Xem bài viết trên microsoft này để biết chi tiết: http://connect.microsoft.com/VisualStudio/feedback/details/214349/httputility-urlencode-does-not-encode-apostrophe

2

điều này là đúng nếu bạn có nhiều thông số trong chuỗi truy vấn.

ví dụ: & firstname = bob & secondName = "Tracy và John"

1

Và nếu bạn đang nhận được một giá trị từ một GridView các & ampersand có thể rất tốt được hiển thị như "&amp;":

row.Cells[4].Text.ToString() = xxxx&amp; 

Vì vậy, trong trường hợp này, bạn sẽ muốn sử dụng:

.Replace("&amp;", "%26") 
2

Bạn phải sử dụng Server.UrlEncode(string containing the ampersand).

Tôi vừa thử nghiệm nó và chuỗi truy vấn được trả về được mã hóa chính xác và sau đó được giải mã.

HttpUtility không hoạt động cho hoạt động này.

Các vấn đề liên quan