2013-05-18 32 views
119

Tôi đang cố gắng gửi thư GET có chứa chuỗi có ký hiệu và không thể tìm cách thoát khỏi ký hiệu và trong url.ký hiệu thoát trong url

Ví dụ:

http://www.example.com?candy_name=M&M 
result => candy_name = M 

Tôi cũng đã cố gắng:

http://www.example.com?candy_name=M\&M 
result => candy_name = M\\ 

Tôi đang sử dụng url bằng tay vì vậy tôi chỉ cần các nhân vật chính xác.

Tôi không thể sử dụng bất kỳ thư viện nào. Nó được hoàn thiện bằng cách nào?

Trả lời

219

Họ cần phải được mã hoá phần trăm:

> encodeURIComponent('&') 
"%26" 

Vì vậy, trong trường hợp của bạn, URL sẽ trông như thế:

http://www.mysite.com?candy_name=M%26M 
+1

: -% 26 không hoạt động đối với tôi. Còn có những giải pháp nào nữa ko.? – Sanjiv

+0

@ Sanjiv: ý bạn là gì khi "không hoạt động"? – Blender

+1

Khi tôi thay thế & đến% 26, nó vẫn hiển thị cùng một lỗi-- 'Giá trị Request.Path nguy hiểm tiềm ẩn được phát hiện từ máy khách (&). ' – Sanjiv

5

Hãy thử sử dụng http://www.mysite.com?candy_name=M%26M.

Xem thêm này reference và một số thông tin thêm về wikipedia.

2

Bạn có thể sử dụng ký tự% escape to 'escape' không được phép trong URL. Xem RFC1738.

Một bảng các giá trị ascii là ở đây: http://www.asciitable.com/

Bạn có thể thấy & là 26 trong hex - vì vậy những gì bạn cần là M% 26 triệu

27

này không chỉ áp dụng để dấu và trong URL , nhưng cho tất cả reserved characters. Một số trong đó bao gồm:

# $ & + ,/: ; = ? @ [ ] 

Ý tưởng là giống như mã hóa một & trong một tài liệu HTML, nhưng bối cảnh đã thay đổi được trong URI, ngoài việc có trong tài liệu HTML. Vì vậy, mã hóa phần trăm ngăn các vấn đề với phân tích cú pháp bên trong cả hai ngữ cảnh.

Nơi điều này hữu ích rất nhiều là khi bạn cần đặt URL bên trong một URL khác. Ví dụ, nếu bạn muốn đăng một trạng thái trên Twitter:

http://www.twitter.com/intent/tweet?status=What%27s%20up%2C%20StackOverflow%3F(http%3A%2F%2Fwww.stackoverflow.com) 

Có rất nhiều các nhân vật dành riêng trong Tweet của tôi, cụ thể là ?'():/, vì vậy tôi mã hóa toàn bộ giá trị của tham số status URL. Điều này cũng hữu ích khi sử dụng các liên kết mailto: có nội dung hoặc chủ đề thư vì bạn cần phải mã hóa các tham số bodysubject để giữ nguyên ngắt dòng, ký hiệu và vv.

Khi một nhân vật từ tập dành riêng (một "nhân vật dành riêng") có ý nghĩa đặc biệt (gọi là "dành riêng mục đích") trong một bối cảnh nhất định, và một URI scheme nói rằng nó là cần thiết để sử dụng nhân vật mà cho một số mục đích khác , thì ký tự phải được mã hóa phần trăm.Mã hóa phần trăm ký tự dành riêng liên quan đến việc chuyển đổi ký tự thành giá trị byte tương ứng là trong ASCII và sau đó biểu thị giá trị đó là một cặp chữ số thập lục phân. Các chữ số, đứng trước dấu phần trăm ("%") được dùng làm ký tự thoát, sau đó được sử dụng trong URI thay cho ký tự dành riêng. (Đối với một ký tự không phải ASCII, nó là thường được chuyển đổi thành chuỗi byte của nó trong UTF-8, và sau đó mỗi byte giá trị được biểu diễn như trên.) Ký tự dành riêng "/", cho ví dụ , nếu được sử dụng trong " đường dẫn "thành phần của một URI, có đặc biệt là ý nghĩa là một dấu phân cách giữa các đoạn đường dẫn. Nếu, theo lược đồ URI đã cho, "/" cần nằm trong đoạn đường dẫn, thì ba ký tự "% 2F" hoặc "% 2f" phải được sử dụng trong phân khúc thay vì thô "/".

http://en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters

+2

Trong số các danh sách trên, '! '() * 'không được mã hóa URL bằng cách sử dụng' encodeURIComponent'. –

0
// this may help if someone want by php 
$variable ="candy_name=M&M"; 
$variable = str_replace("&","%26",$variable); 
Các vấn đề liên quan