URL kodlaması “&” (ve işareti) “& amp;” olarak görür HTML varlığı


294

Bir URL (GET aracılığıyla) geçirilecek bir dize kodlama. Kullandığım Ama eğer escape, encodeURIya encodeURIComponent, &değiştirilecek %26amp%3B, ama değiştirilecektir istiyorum %26. Neyi yanlış yapıyorum?


Dize nereden geliyor? Şimdiye kadar sahip olduğunuz kodu gönderebilir misiniz?
— Andy E

1
&ve işareti bir HTML bağlamında kaçmanın doğru yolu ... kaynağınız nereden geliyor? ve varış noktası nedir? Örneğin, bu sunucu tarafını yapmak daha iyi olabilir.
— Nick Craver

HTML gövdesinden bir şey yakaladım (ve HTML kodlu (yani, şimdi & şimdi fark ediyorum)) ve bir URL'de geçirmek zorundayım ... Yani, html kodunu çözmem gerekiyor (ama nasıl?)
— TED

2
buldum ... Ben jquery .html () kullanılır, değil .text () ... aptal (A)
— dododedodonl

1
jQuery'nin .html () eşleştiren innerHTML konudur bu yüzden :-) cevabım söylediği gibi, mülkiyet
— Andy E

Yanıtlar:


438

Kodunuzu görmeden, karanlıkta bir bıçaktan başka cevap vermek zor. Doğru yöntem olan encodeURIComponent () için geçirdiğiniz dize , innerHTML özelliğine erişme sonucu geliyor sanırım . Solüsyon elde etmektir innerText / textContent yerine özellik değeri:

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

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

Durum böyle değilse , HTML varlığını değiştirmek için replace () yöntemini kullanabilirsiniz:

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

94

Kelimenin tam anlamıyla bunu yaptıysanız:

encodeURIComponent('&')

Sonucudur Ardından %26, buradan test edebilirsiniz . Kodladığınız dizenin adil olduğundan & ve &başlamadığından emin olun ... aksi halde doğru kodladığından, büyük olasılıkla durum söz konusudur. Herhangi bir nedenle farklı bir sonuca ihtiyacınız varsa .replace(/&/g,'&'), kodlamadan önce bir yapabilirsiniz .


3
... bu muhtemelen onun sorunu.
— Pekka

2

HTML ve URI kodlamaları vardır. &olan & HTML kodlu iken %26olduğu &içinde URI kodlama .

Yani URI dizenizi kodlamadan önce HTML kodunu çözmek ve daha sonra URI kodlamak isteyebilirsiniz :)

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

sonuç %26AndOtherHTMLEncodedStuff

Umarım bu size biraz zaman kazandırır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.