2012-07-02 15 views
70

मैं जावास्क्रिप्ट से POST विधि के साथ कुछ चर और एक स्ट्रिंग भेजना चाहता हूं। मुझे डेटाबेस से स्ट्रिंग मिलती है, और उसके बाद इसे एक PHP पृष्ठ पर भेज दें। मैं XMLHttpRequest ऑब्जेक्ट का उपयोग कर रहा हूं। समस्या यह है कि स्ट्रिंग में वर्ण "" कुछ बार होता है, और PHP में $ _POST सरणी इसे एकाधिक कुंजी की तरह देखता है। मैंने प्रतिस्थापित() फ़ंक्शन के साथ "" "\ &" के साथ "" को बदलने का प्रयास किया, लेकिन ऐसा कुछ नहीं लगता है। क्या कोई मदद कर सकता है?मैं AJAX के माध्यम से "&" (एम्पर्सेंड) कैरेक्टर कैसे भेज सकता हूं?

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

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> 

उत्तर

127

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

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

var wysiwyg_clean = encodeURIComponent(wysiwyg); 

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

+0

हाँ, encodeURIComponent यह करता है! धन्यवाद! – candino

+0

एम्परसेंड समस्या से बचने के लिए पर्याप्त इस सुरक्षित रूप से डेटा से बचने के लिए पर्याप्त है या IST "बस" क्या है? – Sprottenwels

+0

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

15

आप encodeURIComponent() उपयोग करने के लिए चाहते हो सकता है।

encodeURIComponent("&quot;Busola&quot;"); // => %26quot%3BBusola%26quot%3B 
+0

इस कोड काम कर रहा है .. thanx भाई .. –

7

आप एम्परसेंड यूआरएल-से बचने के लिए की जरूरत है। उपयोग:

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

Wolfram बताते हैं, यह अच्छी तरह से (सभी अन्य विशेष वर्ण के साथ) encodeURIComponent द्वारा नियंत्रित किया जाता।

0

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

जावास्क्रिप्ट (Docu)

var wysiwyg_clean = window.btoa(wysiwyg); 

पीएचपी (Docu):

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

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

आप लिख सकते हैं:

var wysiwyg_clean = encodeURIComponent(wysiwyg); 

और सर्वर साइड पर:

htmlspecialchars($_POST['wysiwyg']); 

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

1

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

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

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