URL एनकोड “&” (ampersand) को “& amp;” के रूप में देखता है HTML इकाई


293

मैं एक स्ट्रिंग एन्कोडिंग कर रहा हूं जो कि URL (GET के माध्यम से) में पारित हो जाएगी। लेकिन अगर मैं उपयोग करता हूं escape, encodeURIया encodeURIComponent, के &साथ बदल दिया जाएगा %26amp%3B, लेकिन मैं चाहता हूं कि इसे बदल दिया जाए %26। मैं क्या गलत कर रहा हूं?


तार कहाँ से आता है? क्या आपके पास अब तक का कोड पोस्ट कर सकते हैं?
एंडी ई

1
&HTML संदर्भ में एम्परसैंड से बचने का उचित तरीका है ... आपका स्रोत कहां से आ रहा है? और गंतव्य क्या है? उदाहरण के लिए यह सर्वर-साइड करना बेहतर हो सकता है।
निक Craver

मुझे HTML बॉडी से कुछ मिलता है (और वह है HTML एन्कोडेड (इसलिए, वहाँ & amp; मुझे अब पता चलता है)) और मुझे इसे एक URL में पास करना होगा ... इसलिए, मुझे html (लेकिन कैसे?) को डीकोड करने की आवश्यकता है hi फिर स्ट्रिंग को एन्कोड करें (
एन्कोडर्कोम्पोनेंट के

2
यह पाया ... मैं jquery .html (), नहीं .text () ... बेवकूफ (ए)
डोडोडोडोनल

1
jQuery के .html () करने के लिए नक्शे innerHTML , संपत्ति तो मुद्दा है के रूप में मैं अपने जवाब में :-) कहा
एंडी ई

जवाबों:


438

आपके कोड को देखे बिना, अंधेरे में एक छुरा के अलावा अन्य का जवाब देना मुश्किल है। मुझे लगता है कि आप जिस स्ट्रिंग को एन्कोड्युरिकम्पोनेंट () में उपयोग कर रहे हैं , जो कि उपयोग करने के लिए सही तरीका है, वह भीतर की HTML संपत्ति तक पहुँचने के परिणाम से आ रहा है । समाधान पाने के लिए है innerText / textContent बजाय संपत्ति मूल्य:

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

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

यदि ऐसा नहीं है, तो आप HTML इकाई को बदलने के लिए प्रतिस्थापित () विधि का उपयोग कर सकते हैं :

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

94

यदि आपने सचमुच ऐसा किया है:

encodeURIComponent('&')

फिर परिणाम है %26, आप इसे यहाँ परीक्षण कर सकते हैं । सुनिश्चित करें कि जो स्ट्रिंग आप एन्कोडिंग कर रहे हैं, वह सिर्फ इसके साथ शुरू करने के लिए &नहीं &है ... अन्यथा यह सही तरीके से एन्कोडिंग है, जो कि संभावना है। यदि आपको किसी कारण से अलग परिणाम की आवश्यकता है, तो आप .replace(/&/g,'&')एन्कोडिंग से पहले कर सकते हैं ।


3
... यही शायद उसकी समस्या है।
पेकका

2

HTML और URI एन्कोडिंग है। &है & HTML में इनकोडिंग , जबकि %26है &में URI एन्कोडिंग

तो URI को अपने स्ट्रिंग को एन्कोडिंग करने से पहले आप HTML डीकोड करना चाहते हैं और फिर URI इसे एनकोड कर सकते हैं :)

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

परिणाम %26AndOtherHTMLEncodedStuff

आशा है कि यह आपको कुछ समय बचाता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.