Mã hóa URL sẽ xem Tiếng & & ((ký hiệu) như là & &; Thực thể HTML


293

Tôi đang mã hóa một chuỗi sẽ được chuyển qua một URL (thông qua GET). Nhưng nếu tôi sử dụng escape, encodeURIhoặ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?


Chuỗi đến từ đâu? Bạn có thể gửi mã bạn có cho đến nay?
Andy E

1
&là cách thích hợp để thoát khỏi ký hiệu và trong ngữ cảnh HTML ... nguồn của bạn đến từ đâu? và đích đến là gì? Nó có thể tốt hơn để làm phía máy chủ này chẳng hạn.
Nick Craver

Tôi viết một cái gì đó từ phần thân HTML (và đó là mã hóa HTML (vì vậy, hiện có & amp; tôi nhận ra)) và tôi phải chuyển nó trong một URL ... Vì vậy, tôi cần giải mã html (nhưng bằng cách nào?) vi sau đó mã hóa chuỗi (với encodeURIComponent) ...
dododingodonl

2
tìm thấy nó ... Tôi đã sử dụng trong jquery .html (), không phải .text () ... ngu ngốc (A)
dododingodonl

1
Ánh xạ .html () của jQuery vào thuộc tính InternalHTML , vì vậy vấn đề như tôi đã nói trong câu trả lời của mình :-)
Andy E

Câu trả lời:


438

Không nhìn thấy mã của bạn, thật khó để trả lời ngoài một cú đâm trong bóng tối. Tôi đoán rằng chuỗi bạn chuyển đến encodeURIComponent () , đây là phương thức chính xác để sử dụng, xuất phát từ kết quả của việc truy cập thuộc tính InternalHTML . 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 phương thức thay thế () để thay thế thực thể HTML:

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

94

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

encodeURIComponent('&')

Sau đó, kết quả là %26, bạn có thể kiểm tra nó ở đây . Hãy chắc chắn rằng chuỗi bạn đang mã hóa chỉ & và không &bắt đầu bằng ... nếu không nó là mã hóa chính xác, rất có thể là trường hợp. Nếu bạn cần một kết quả khác vì một số lý do, bạn có thể thực hiện .replace(/&/g,'&')trước khi mã hóa.


3
... đó có lẽ là vấn đề của anh ấy
Pekka

2

Có mã hóa HTML và URI. &được & mã hóa dưới dạng HTML khi %26&trong mã hóa URI .

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

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 sẽ giúp bạn tiết kiệm thời gian

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.