Thêm chuỗi truy vấn đăng nhập


86

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

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

Xin hãy tư vấn.

Cảm ơn.

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

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

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

FYTôi hãy coi chừng UrlBuilder, có vẻ hơi vô ích, đó là cách tôi vấp phải câu hỏi của bạn. Xem stackoverflow.com/questions/24576239/…
KCD

* UriBuilderkhông phải Url
KCD

Câu trả lời:


146

+dấu hiệu có một ý 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 về ngữ nghĩa trong chuỗi truy vấn &được sử dụng để phân tách các var=valuecặp 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, để một +được chuyển đổi đúng cách thành một khoảng trắng. Bây giờ, nếu bạn muốn một ký tự +xuất hiện trong chuỗi truy vấn, bạn cần chỉ định %2Bthay thế.

+đăng nhập chuỗi truy vấn được giải mã URL thành một khoảng trắng. %2Btrong 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 các ví dụ trên, tập lệnh máy chủ của Google là giải mã URL các tham 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 %ký hiệu theo sau là mã hex của ký tự đặc biệt. Ví dụ, chúng ta biết rằng mã hex của Alà 0x41 (thập phân: 65). Thử cái này:

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

Hy vọng điều này làm cho mã hóa URL 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 một URL với +các dấu hiệu trong tham số truy vấn của nó và tập lệnh phía máy chủ sẽ xử lý các tham 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's khi yêu cầu đến tập lệnh phía máy chủ. Bây giờ khi URL của tập lệnh phía máy chủ-giải mã chuỗi truy vấn, tất cả %2Bsẽ được chuyển đổi trở lại +các dấu hiệu mà bạn muốn.

Xem Mã hóa URL trong JavaScript? để tìm hiểu cách mã hóa URL bằng cách sử dụng JavaScript. Câu trả lời ngắn gọn từ cuộc thảo luận ở đó:

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

1
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 bằng javascript.
domlao

5

Bạn nên URLEncode các giá trị chuỗi truy vấn của mình để đảm bảo không bị mất bất kỳ ký tự đặc biệt nào.


1
Như thế này, string str = Server.UrlEncode (Requestery.QueryString ["new"]); ? THanks
domlao

Không hoàn toàn, bạn cần mã hóa chúng trước khi đưa chúng vào chuỗi truy vấn hơn là khi bạn gỡ chúng ra. Bạn đang thiết lập các giá trị trong chuỗi truy vấn như thế nào?
DoctorMick

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


1

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

Tạo url của bạn bằng Server.UrlEncode. ví dụ

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

3
Nếu đó là một URL, bạn nên Mã hóa URL, Không phải Mã hóa Html. Họ khác nhau.
Damien_The_Un Believer

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

0

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


0

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

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

klasjdlkasd + djid3223


-1

Hãy thử điều này, nó phù hợp với tôi:

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


-2

Thêm dòng này trong Giải mã hàm:

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

2
Còn những nhân vậ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à & vv
John Mc
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.