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.