2011-10-20 10 views
12

मैं एक खोज फ़ॉर्म संपादित कर रहा हूं और डेटाबेस में विशेष पात्रों के खिलाफ सुरक्षा करने की कोशिश कर रहा हूं।अनुरोध पैरामीटर खोने प्लस साइन

<select id="descriptionSelect" multiple="multiple"> 
    <c:forEach items="${descriptions}" var="description"> 
     <option value="${fn:escapeXml(description)}")}">        
      <c:out value="${description}" /> 
     </option> 
    </c:forEach> 
</select> 

जब फ़ॉर्म सबमिट पृष्ठ गतिशील उत्पन्न करता है: JSP खोज रूप में, एक (एकाधिक चयन करें) लटकती (: विवरण स्ट्रिंग की एक सूची है ध्यान दें) उन विवरणों का वह क्वेरी में उपयोग किया जाएगा चुनने की अनुमति देता यूआरएल जो यूआरएल में क्वेरी पैरामीटर लेता है (बदसूरत, मुझे पता है, हाथ बंधे हैं)। विवरण खंड बनाने वाला स्निपेट यहां दिया गया है।

var descriptionSelectBox = document.getElementById("descriptionSelect"); 
var descriptionsUrlAddition = ""; 

for (var i = 0; i < descriptionSelectBox.options.length; i++) { 
    if (descriptionSelectBox.options[i].selected) { 
     descriptionsUrlAddition += "&descriptions=" + escape(descriptionSelectBox.options[i].value); 
    } 
} 

मैं डेटाबेस जिसका वर्णन है में एक परीक्षण प्रविष्टि:

एएए `~ @ # $%^& *() _ + - = {} | [] \:", ' <>?, और/वाह वाह में बहुत सारे विशेष पात्र हैं।

ऊपर दिए गए कोड के साथ, अनुरोध के लिए जब अनुरोध नियंत्रक को मिलता है, तो विवरण + चिह्न खो देता है (यह केवल एक स्थान बन जाता है)।

क्या किसी को पता है कि क्या हो रहा है और इसे कैसे ठीक किया जा सकता है? मुझे यकीन नहीं है कि यूआरएल के साथ कुछ करने के लिए यह कुछ है, या क्या। मैं संपादित कर सकता हूं कि वर्णन सूची कैसे आबादी है (शायद वहां से बच रहा है) यदि आप इसे एक सुझाव के रूप में पेश करते हैं, तो कृपया जावा विशिष्ट कोड (कोई अपाचे एस्केप यूटिल क्लासेस इत्यादि) का उपयोग करें।

यदि यह मदद करता है, तो जावास्क्रिप्ट में अलर्ट का उपयोग करने से संकेत मिलता है कि + संकेत पहले से नहीं बदला जा रहा है अनुरोध को रद्द करना

उत्तर

26

+ का मतलब यूआरएल में "स्पेस" है। इसे %2B के साथ बदलें। उदाहरण के लिए, आप descriptionsUrlAddition लिखने के बाद ही ऐसा कर सकते हैं।

descriptionsUrlAddition = descriptionsUrlAddition.replace('+', '%2B'); 
+0

हालांकि आप इसे कैसे कार्यान्वित करेंगे? –

+0

@ राहेल जी, यूआरएल स्ट्रिंग में बस '% 2 बी 'के साथ सभी' + 'संकेतों को प्रतिस्थापित करें। एक बार आपका यूआरएल बना हो जाने के बाद और आपके पास स्ट्रिंग के रूप में है, तो आप केवल 'स्ट्रिंग' की 'प्रतिस्थापन()' विधि का उपयोग कर सकते हैं। जोड़ा गया उदाहरण – rid

+0

कोड जोड़ें (बचें (वर्णन चयन करें बॉक्स.ऑप्शन [i] .value) .replace ("+", "% 2B")) आपके उत्तर में और मैं इसे सही के रूप में चिह्नित करूंगा। धन्यवाद =) –

0

आपको सामने वाले पक्ष में अपने पैरामीटर को एन्कोड करने के लिए जावास्क्रिप्ट एन्कोडुरी फ़ंक्शन का उपयोग करना चाहिए।

संबंधित मुद्दे