मैं AJAX के माध्यम से "और" (एम्परसैंड) चरित्र कैसे भेज सकता हूं?


89

मैं POSTजावास्क्रिप्ट से विधि के साथ कुछ चर और एक स्ट्रिंग भेजना चाहता हूं ।

मुझे डेटाबेस से स्ट्रिंग मिलती है, और फिर इसे PHP पेज पर भेजते हैं। मैं एक XMLHttpRequestवस्तु का उपयोग कर रहा हूं ।

समस्या यह है कि स्ट्रिंग में &कुछ बार चरित्र होता है , और $_POSTPHP में सरणी इसे कई कुंजियों की तरह देखता है।

मैं जगह की कोशिश की &साथ \&साथ replace()समारोह है, लेकिन यह कुछ भी करने को नहीं लगता है।

क्या कोई मदद कर सकता है?

जावास्क्रिप्ट कोड और स्ट्रिंग इस तरह दिखता है:

var wysiwyg = dijit.byId("wysiwyg").get("value");
var wysiwyg_clean = wysiwyg.replace('&','\&');

var poststr = "act=save";

poststr+="&titlu="+frm.value.titlu;
poststr+="&sectiune="+frm.value.sectiune;
poststr+="&wysiwyg="+wysiwyg_clean;
poststr+="&id_text="+frm.value.id_text;

xmlhttp.open("POST","lista_ajax.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(poststr);

स्ट्रिंग है:

 <span class="style2">&quot;Busola&quot;</span>

जवाबों:


169

आप encodeURIComponent () का उपयोग कर सकते हैं ।

यह उन सभी पात्रों से बच जाएगा जो URL में शब्दशः नहीं हो सकते हैं:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

इस उदाहरण में, एम्परसैंड चरित्र &को एस्केप अनुक्रम से बदल दिया जाएगा %26, जो URL में मान्य है।


क्या यह डेटा को सुरक्षित रूप से भागने के लिए पर्याप्त है या एम्परसेंड मुद्दे से बचने के लिए "बस" पर्याप्त नहीं है?
वॉटेन्सपर्सल्स

@Sprottenwels, यह सभी डेटा को ठीक से एनकोड करने के लिए पर्याप्त है। इस संदर्भ में "सुरक्षित रूप से" से आपका क्या अभिप्राय है?
फ्रैडरिक हमीदी


9

आपको एम्परसैंड से उर-भागने की आवश्यकता है। उपयोग:

var wysiwyg_clean = wysiwyg.replace('&', '%26');

जैसा कि वोल्फ्राम बताते हैं, यह अच्छी तरह से (सभी अन्य विशेष पात्रों के साथ) एनकोडरिकम्पोनेंट द्वारा नियंत्रित किया जाता है।


4

रामिल अमार का जवाब केवल और चरित्र के लिए काम करता है। यदि आपके पास कुछ अन्य विशेष वर्ण हैं, तो आपको PHP htmlspecialchars() और JS का उपयोग करना चाहिएencodeURIComponent()

तुम लिख सकते हो:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

और सर्वर की तरफ:

htmlspecialchars($_POST['wysiwyg']);

यह सुनिश्चित करेगा कि AJAX अपेक्षित रूप से डेटा को पारित करेगा, और यह कि PHP (यदि डेटाबेस में डेटा को इंसर्ट करने की स्थिति में) सुनिश्चित करें कि डेटा अपेक्षित रूप से काम करता है।


1

आप जावास्क्रिप्ट पक्ष पर Base64 एन्कोडिंग का उपयोग करके अपने स्ट्रिंग को एन्कोड कर सकते हैं और फिर इसे सर्वर साइड पर PHP (?) के साथ डिकोड कर सकते हैं।

जावास्क्रिप्ट ( दस्तावेज़ )

var wysiwyg_clean = window.btoa( wysiwyg );

PHP ( दस्तावेज़ ):

var wysiwyg = base64_decode( $_POST['wysiwyg'] );

1

पसंदीदा तरीका यह है कि जावास्क्रिप्ट लाइब्रेरी जैसे jQuery का उपयोग करें और अपने डेटा विकल्प को ऑब्जेक्ट के रूप में सेट करें, फिर jQuery को एन्कोडिंग करने दें, जैसे:

$.ajax({
  type: "POST",
  url: "/link.json",
  data: { value: poststr },
  error: function(){ alert('some error occured'); }
});

यदि आप jQuery का उपयोग नहीं कर सकते हैं (जो इन दिनों बहुत मानक है), तो encodeURIComponent का उपयोग करें ।


1

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

data: "param1=getAccNos&param2="+encodeURIComponent('Dolce & Gabbana') 

या

var someValue = 'Dolce & Gabbana';
data: "param1=getAccNos&param2="+encodeURIComponent(someValue)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent


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