2010-08-22 16 views
283

Tôi mã hóa một chuỗi sẽ được chuyển vào URL (qua GET). Nhưng nếu tôi sử dụng escape, encodeURI hoặc encodeURIComponent, & sẽ được thay thế bằng %26amp%3B, nhưng tôi muốn nó được thay thế bằng %26. Tôi đang làm gì sai?Mã hóa URL thấy “&” (dấu và) là “&” Thực thể HTML

+0

đâu chuỗi đến từ? Bạn có thể đăng các mã bạn có cho đến nay? –

+1

'&' là cách thích hợp để thoát khỏi dấu và trong ngữ cảnh HTML ... nguồn của bạn đến từ đâu? và đích đến là gì? Nó có thể là tốt hơn để làm điều này phía máy chủ ví dụ. –

+0

Tôi grap một cái gì đó từ cơ thể HTML (và đó là HTML mã hóa (vì vậy, có & Tôi nhận ra bây giờ)) và tôi phải vượt qua nó trong một URL ... Vì vậy, tôi cần phải giải mã html (nhưng làm thế nào?) vi sau đó mã hóa chuỗi (với encodeURIComponent) ... – dododedodonl

Trả lời

422

Nếu không nhìn thấy mã của bạn, thật khó để trả lời khác hơn là đâm trong bóng tối. Tôi đoán chuỗi bạn đang chuyển đến encodeURIComponent(), là phương pháp chính xác để sử dụng, đến từ kết quả truy cập thuộc tính innerHTML. Giải pháp là để có được những innerText/textContent giá trị tài sản thay vì:

var str, 
    el = document.getElementById("myUrl"); 

if ("textContent" in el) 
    str = encodeURIComponent(el.textContent); 
else 
    str = encodeURIComponent(el.innerText); 

Nếu đó không phải là trường hợp, bạn có thể sử dụng replace() phương pháp để thay thế các thực thể HTML:

encodeURIComponent(str.replace(/&/g, "&")); 
91

Nếu bạn đã làm theo nghĩa đen này:

encodeURIComponent('&') 

Sau đó, kết quả là %26, you can test it here. Đảm bảo chuỗi bạn đang mã hóa là chỉ cần& và không phải là & để bắt đầu bằng ... nếu không mã hóa được mã hóa chính xác, có khả năng là trường hợp. Nếu bạn cần một kết quả khác vì một lý do nào đó, bạn có thể thực hiện .replace(/&/g,'&') trước khi mã hóa.

+3

... đó có lẽ là vấn đề của mình. –

2

Có mã hóa HTML và URI. &&encoded in HTML trong khi %26& trong URI encoding.

Vì vậy, trước khi URI mã hóa chuỗi của bạn, bạn có thể muốn sang HTML decode và sau đó URI mã hóa nó :)

var div = document.createElement('div'); 
div.innerHTML = '&AndOtherHTMLEncodedStuff'; 
var htmlDecoded = div.firstChild.nodeValue; 
var urlEncoded = encodeURIComponent(htmlDecoded); 

kết quả %26AndOtherHTMLEncodedStuff

Hy vọng điều này giúp bạn tiết kiệm một số thời gian

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