2012-02-05 17 views
7
#&q=car&category=Car%20Audio%2CAccessories&brand= 

tôi mượn một chức năng này từ một câu hỏi trước hỏi về SO:Làm cách nào để thay thế% 2C bằng <comma> trong javascript?

function insertParam(key, value) 
{ 
key = escape(key); value = escape(value); 

var kvp = document.location.hash.substr(1).split('&'); 

var i=kvp.length; var x; while(i--) 
{ 
    x = kvp[i].split('='); 

    if (x[0]==key) 
    { 
      x[1] = value; 
      kvp[i] = x.join('='); 
      break; 
    } 
} 

if(i<0) {kvp[kvp.length] = [key,value].join('=');} 

//this will reload the page, it's likely better to store this until finished 

document.location.hash = kvp.join('&'); 
} 

tôi sử dụng nó như thế này:

insertParam("category",xy); 
    insertParam("brand",zy); 

Vấn đề của tôi là nó được giải mã của dấu phẩy để% 2C. Tôi biết tôi có thể xử lý các nhân vật ở phía máy chủ, nhưng làm thế nào tôi có thể làm cho nó trông đẹp với javascript? Theo tôi khá có nghĩa là thay thế% 2c bằng dấu phẩy.

Trả lời

2

decodeURIComponent(foo) là thứ bạn đang tìm kiếm.

Chỉnh sửa: Đã đọc câu hỏi của bạn.

Sử dụng replace(/&/g, "%26").replace(/=/g, "%3D") thay vì escape trên khóa và giá trị để thực hiện việc này.

Không có chức năng nào trong số 3 chức năng encodeURI, encodeURIComponent hoặc encode làm việc cho tác vụ này, vì chúng mã hóa dấu phẩy hoặc không mã hóa &=.

2

Tôi không biết tại sao câu trả lời trước đó bị gạch ngang, nhưng câu trả lời là chính xác.

alert(decodeURIComponent('%2C')); 

Vì vậy, bạn chia chuỗi truy vấn thành các phần tử, chia cho biểu tượng &. Hơn bạn chia kết quả bằng biểu tượng = và áp dụng decodeURIComponent trên cả tên và giá trị.

ps: key = escape(key); value = escape(value); bạn không nên sử dụng lối thoát ở đây (nó khác với các trình duyệt khác nhau. Và 'khác' 'nghĩa là IE). Sử dụng encodeURIComponent.

pps: because they either encode commas or don't encode &= ???

alert(encodeURIComponent('&=,')); 

đầu ra %26%3D%2C

+0

RPM muốn để lưu trữ cặp khóa-giá trị trong băm, tách bởi '=' và '&' (như GET-tham số). Để làm như vậy đúng, '=' và '&' phải được mã hóa, có thể được thực hiện bằng cách sử dụng 'decodeURIComponent' hoặc' escape'. Cả hai chức năng này, tuy nhiên, cũng mã hóa ',' mà không được mong muốn. 'decodeURI' không mã hóa' = 'hoặc' & 'vì vậy nó cũng không phù hợp. – copy

+0

@copy Tôi không chắc tại sao ',' không được mã hóa. – Cheery

+0

Nó "trông không đẹp" (không phải ý kiến ​​cá nhân của tôi). Ngoài ra nó không thực sự cần thiết. – copy

5

này làm việc cho tôi để hoàn tác encodeURIComponent() trên URI có chứa dấu phẩy:

.replace(/%2C/g,",") 
Các vấn đề liên quan