2012-05-11 13 views
5

Nói rằng tôi có một hình thức đơn giản như thế này:Làm thế nào để tái tạo mã hóa url dưới dạng yêu cầu GET, từ javascript, khi dấu trọng âm và các tham số đó có liên quan?

<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    </head> 
    <body> 
    <div id="search"> 
     <form method="GET" action="/super-action"> 
     <input type="text" name="q" /> 
     </form> 
    </div> 
    </body> 
</html> 

với một đầu vào như: @tags "Cinéma Whatever"

một hình thức GET yêu cầu kết quả trong một url trông giống như: /super-action?q=%40tags+"Cinéma+Whatever"

Bây giờ tôi muốn sinh sản với javascript trong location.hash, với dấu thăng thay vì dấu gạch chéo, như: /super-action#q=%40tags+"Cinéma+Whatever"

Nhưng với các chức năng có sẵn, tôi nhận được kết quả ở đó:

  • thoát (đầu vào): @tags%20%22Cin%E9ma%20Whatever%22
  • encodeURI (đầu vào): @tags%20%22Cin%C3%A9ma%20Whatever%22
  • encodeURIComponent (đầu vào): %40tags%20%22Cin%C3%A9ma%20Whatever%22
  • $ (theo mẫu) .serialize(), mà không q =: %40tags+%22Cin%C3%A9ma+Whatever%22

Câu hỏi: Làm cách nào để tạo giá trị đầu vào, như @tags "Cinéma Whatever", giống như yêu cầu của biểu mẫu GET: %40tags+"Cinéma+Whatever" bằng javascript?

+0

Tôi không hiểu chính xác những gì bạn muốn, URL GET có '?' Trong khi chuỗi bạn muốn tạo có '#' ở vị trí của nó. Nó có đúng không? Bạn muốn có cùng một chuỗi mà bạn có với một yêu cầu GET nhưng với '?' Được thay thế bởi '#'? –

+0

Nếu bạn sẵn sàng thêm thư viện js vào trang của mình, tôi có thể có giải pháp. Tôi muốn biết nếu bạn muốn chuỗi URL được mã hóa của mình có dấu hỏi hoặc dấu hiệu số đầu tiên. –

+0

@Fabricio: Những gì tôi đang cố gắng đạt được là biểu mẫu tìm kiếm hoạt động cả với ajax và không có, sử dụng cùng một chuỗi truy vấn trong url có dấu (#) hoặc (?). Bằng cách đó, nếu ai đó đánh dấu một url bằng hàm băm (#) và quay trở lại, tôi lấy kết quả tìm kiếm bằng javascript bằng cách chuyển bất kỳ thứ gì sau băm đó đến máy chủ bằng dấu (?). Nó vẫn có thể hoạt động nếu các ký tự đặc biệt như "é" là "% E9", php có thể chuyển đổi nó ở phía máy chủ. Nhưng tôi đã hy vọng tôi có thể sử dụng cùng một hình thức chuyển đổi GET. – bksunday

Trả lời

4

Theo RFC 1738, /super-action?q=%40tags+"Cinéma+Whatever" không hợp lệ bên trong một URL:

Như vậy, chữ cái và số, ký tự đặc biệt, và ký tự dành riêng cho sử dụng "$ -_ + * '(),.!" các mục đích được bảo lưu của chúng có thể được sử dụng không được mã hóa trong một URL.

Điều đó có nghĩa rằng bạn không thể tạo ra một URL hợp lệ với chuỗi con trong đó. Bạn phải mã hóa các ký tự đặc biệt "é, nếu không thì chuỗi kết quả không phải là URL.

Lý do tại sao bạn nghĩ rằng điều này hợp lệ có thể là trình duyệt của bạn chơi thủ đoạn trên bạn: Có thể hiển thị URL ở dạng mã hóa một phần để dễ đọc hơn trong thanh địa chỉ. Hãy thử sử dụng trình phân tích giao thức như Wireshark để kiểm tra đường dẫn URL thực tế thực tế được gửi qua mạng.

UPDATE: tôi nhanh chóng xác nhận điều này, tiêu đề HTTP gửi trong phản ứng đối với một hình thức nộp được như sau:

GET /?q=%40tags+%22Cin%C3%A9ma+Whatever%22 HTTP/1.1 

Vì vậy, nó là đầu tiên UTF-8 mã hóa và sau đó URL được mã hóa.

+0

Bạn nói đúng, cả google chrome và firefox đang chơi thủ thuật trên tôi.Nếu tôi chỉ cần chọn url và sao chép nó (Ctrl-C), khi tôi dán nó bất cứ nơi nào khác các ký tự '" 'và' é' đều được mã hóa. Cảm ơn – bksunday

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