2011-07-28 44 views
39

Tôi có một webapp được tạo bằng C# và asp.net. Tôi đã đặt một giá trị tham số trong chuỗi truy vấn có dấu cộng (+). Nhưng dấu cộng biến mất.Chuỗi truy vấn đăng nhập cộng

Làm cách nào để bao gồm dấu cộng (+) trong chuỗi truy vấn mà không biến mất?

Vui lòng thông báo.

Cảm ơn.

Chỉnh sửa: Mã thêm với URLEncode

string str = Server.UrlEncode(Requery.QueryString["new"]); 
+0

bạn có mã không? – tutts

+0

thực sự giá trị phụ thuộc vào đầu vào của người dùng. – domlao

+0

FYI hãy cẩn thận với 'UrlBuilder', có vẻ như một chút vô ích, đó là cách tôi vấp phải câu hỏi của bạn. Xem http://stackoverflow.com/questions/24576239/why-doesnt-uribuilder-query-escaping-url-encoding-the-query-string – KCD

Trả lời

81

+ dấu có ý nghĩa ngữ nghĩa trong chuỗi truy vấn. Nó được sử dụng để đại diện cho một không gian. Một ký tự khác có tầm quan trọng ngữ nghĩa trong chuỗi truy vấn là & được sử dụng để tách các cặp var=value khác nhau trong chuỗi truy vấn.

Hầu hết các tập lệnh phía máy chủ sẽ giải mã các tham số truy vấn trước khi sử dụng chúng, sao cho + được chuyển đổi đúng cách thành không gian. Bây giờ, nếu bạn muốn có một số + bằng chữ để có mặt trong chuỗi truy vấn, bạn cần chỉ định %2B thay thế.

+ đăng nhập vào chuỗi truy vấn được giải mã URL thành không gian. %2B trong chuỗi truy vấn được giải mã URL thành dấu +.

Xem sự khác biệt giữa

http://www.google.com/search?q=foo+bar

http://www.google.com/search?q=foo%2Bbar

Trong ví dụ trên, kịch bản máy chủ của Google là URL-giải mã các thông số truy vấn và sau đó sử dụng chúng để thực hiện tìm kiếm .

Mã hóa URL không là gì ngoài dấu hiệu % theo sau là mã hex của ký tự đặc biệt. Ví dụ: chúng tôi biết rằng mã hex của A là 0x41 (thập phân: 65). Hãy thử điều này:

http://www.google.com/search?q=%41

Hy vọng điều này làm cho URL mã hóa rõ ràng. Vì vậy, nếu bạn muốn dấu hiệu + được giữ nguyên khi JavaScript đang tìm nạp URL có các thông số truy vấn của nó và mã phía máy chủ sẽ xử lý thông số truy vấn sau khi giải mã URL, bạn nên mã hóa URL các tham số truy vấn trong URL trước khi sử dụng phát hành yêu cầu nhận HTTP để tất cả các dấu hiệu + được chuyển đổi thành %2B khi yêu cầu đạt đến tập lệnh phía máy chủ.Bây giờ khi tập lệnh phía máy chủ URL giải mã chuỗi truy vấn, tất cả %2B sẽ được chuyển đổi trở lại thành + các dấu hiệu mà bạn muốn.

Xem Encode URL in JavaScript? để tìm hiểu cách mã hóa URL thông số bằng JavaScript. trả lời ngắn gọn từ các cuộc thảo luận ở đó:

var encodedURL = "http://example.com/foo.php?var=" + encodeURIComponent(param); 
+0

Làm cách nào để thay thế dấu + thành% 2B trong javascript. Bởi vì tôi đang tạo chuỗi truy vấn của mình trong javascript. – domlao

+1

krakat, xem http://stackoverflow.com/q/332872/303363 –

4

Bạn nên URLEncode giá trị chuỗi truy vấn của bạn để chắc chắn rằng bất kỳ ký tự đặc biệt không bị mất.

+0

Như thế này, chuỗi str = Server.UrlEncode (Requery.QueryString ["mới"]); ? THanks – domlao

+0

Không hoàn toàn, bạn cần phải mã hóa chúng trước khi đưa chúng vào chuỗi truy vấn thay vì khi bạn đưa chúng trở lại. Làm thế nào bạn thiết lập các giá trị trong chuỗi truy vấn? – DoctorMick

+0

trong Javascript, như $ ("# btn"). Click (function() {var param = "C++"; ...}); – domlao

0

Tôi thay đổi tuyên bố trước của mình để không ai bị lẫn lộn!

Tạo url của bạn bằng cách sử dụng Server.UrlEncode. ví dụ:

string myUrl = "http://myurl?param1=" + Server.UrlEncode("my+param+1"); 
+1

Nếu là URL, bạn nên mã hóa URL, ** Not ** Html Encode. Họ khác nhau. –

+0

Tôi đã thêm chuỗi truy vấn của mình vào javascript, có cách nào có thể để mã hóa nó trong javascript không? – domlao

+0

Bạn nói đúng !!! xin lỗi vì bất kỳ sự bất tiện nào !! – gred

-1

Hãy thử điều này, nó hoạt động cho tôi:

Request.QueryString["new"].Trim(); 
0

cách đơn giản khác là, Request.Url.ToString().Substring(Request.Url.ToString().IndexOf("=") + 1) giả định rằng URL của tôi là, http://localhost/MyApp/Activate.aspx?ActivationCode=cHbtqH9P2dDZkx/mYUgFFo7nrNqSFgqdPisAzzu5/nwlEYDOHI+CQw==

-1

Thêm dòng này trong Decrypt funcation:

strText = strText.Replace(" ", "+"); 
+1

Còn các ký tự dành riêng khác thì sao? Giải pháp này sẽ chỉ sửa lỗi + chứ không phải? và vân vân –

0

trước khi gửi cho bạn mệnh ameter, bạn cần kiểm tra xem các tham số chứa dấu cộng, nếu có bạn cần thay thế một lá cờ, ví dụ: tham số là: klasjdlkasd + djid3223 bạn có thể thay thế: klasjdlkasdFLAGdjid3223

và khi bạn đi chuyển đổi, bạn cần thay thế angain

klasjdlkasd + djid3223

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