2009-12-04 25 views
8

के साथ स्ट्रिंग में सिंगल कोट्स मैंने एक समस्या में भाग लिया है जहां उपयोगकर्ता डेटा दर्ज करता है और यदि एकल उद्धरण हैं, तो स्क्रिप्ट त्रुटियां समाप्त हो जाती हैं।jQuery AJAX

उपयोगकर्ता द्वारा दर्ज किए गए सिंगल कोट्स को संभालने का सबसे अच्छा तरीका क्या है, इसलिए यह jquery/जावास्क्रिप्ट में हस्तक्षेप नहीं करता है?

अद्यतन:

मैं एक डेटाबेस के लिए ajax के माध्यम से भेज रहा। जेसन अजाक्स कॉल के लिए डेटा पैरामीटर यहां दिया गया है।
data: "{str_" + sectionName + " :'" + UpdateText + "',EntityID: '" + EntityID + "' }",
अद्यतन पाठ के साथ उद्धरण हो सकता है जिसमें स्ट्रिंग हो सकती है।

+2

कोड नमूना प्रदान करना बहुत उपयोगी होगा –

+1

इनपुट के साथ आप क्या कर रहे हैं? –

+0

मैं इसे डेटाबेस में AJAX के माध्यम से भेज रहा हूं। यहां एक जेसन AJAX कॉल के लिए डेटा पैरामीटर है। डेटा: "{str_" + sectionName + ": '" + UpdateText + "', EntityID: '" + EntityID + "'}", अद्यतन पाठ के साथ उद्धरण हो सकता है जिसमें स्ट्रिंग हो सकती है। – Adam

उत्तर

3

के तरीकों की जांच, और सिर्फ \ तरह एक भाग निकले संस्करण के साथ किसी एक या दोहरे उद्धरण चिह्नों की जगह " या \ 0।

21

आपको उद्धरण से बचने की आवश्यकता है या आप जिस स्ट्रिंग का उपयोग करने की योजना बना रहे हैं उसके आधार पर आप जावास्क्रिप्ट से बचने और अनसुलझा कार्यों का उपयोग कर सकते हैं।

alert(escape("mike's")); 
alert(unescape(escape("mike's"))); 

इसके अलावा इस आप कई String.replaceAll कार्यान्वयन में से एक को खोजने या अपना खुद का लिख ​​सकता है escape strings with jQuery

+0

यह एक आकर्षण की तरह काम किया! – CodeLikeBeaker

0

आपको अपने सर्वर-साइड स्क्रिप्ट के अंदर कई कारणों से वास्तव में अपने इनपुट को स्वच्छ करना चाहिए। यदि आप बस उपयोगकर्ता द्वारा दर्ज की गई सभी चीज़ों को प्रदर्शित कर रहे हैं तो आपके एप्लिकेशन को क्रॉस-साइट स्क्रिप्टिंग लॉन्च करने के लिए उपयोग किया जा सकता है हमला।

+1

प्रासंगिक xkcd http://xkcd.com/327/ – thenoviceoof

+0

मुझे लगता है कि उसकी समस्या यह है कि सर्वर पर डेटा भेजने का प्रयास करते समय उसे जावास्क्रिप्ट त्रुटि, क्लाइंट-साइड मिल रहा है। –

0

जावास्क्रिप्ट के लिए बस एक विधि में बनाया गया है जिसमें केवल एक उद्धरण से अधिक शामिल है। इसके बुलाया encodeURIComponent, Javascript Kit से:

अक्षर हैं जो विशेष अर्थ नहीं होता के लिए एक यूआरआई की पैरामीटर वाला हिस्सा एन्कोड करने के लिए, उन्हें इस तरह के "&" के रूप में आरक्षित अक्षर हैं जो कुंजी/मान विभाजक के रूप में कार्य से अलग करने के लिए प्रयोग किया जाता है। एनकोडुरि() से अधिक समावेशी, यह "=" और "&" सहित URL स्ट्रिंग में विशेष अर्थ वाले सभी वर्णों को एन्कोड करता है। इस विधि का उपयोग केवल यूआरआई के पैरामीटर भाग पर करें; अन्यथा, यूआरआई मान्य नहीं हो सकता है यदि इसमें एक वर्ण है जो वैध यूआरआई (यानी: "+") का हिस्सा है, तो यूआरआई पैरामीटर का हिस्सा होने पर अभी भी बच जाना चाहिए।

तो अपने कोड हो जाना चाहिए:

data: "{str_" + encodeURIComponent(sectionName) + " :'" + encodeURIComponent(UpdateText) + "',EntityID: '" + encodeURIComponent(EntityID) + "' }", 

मैं सब कुछ मैं एक क्वेरी स्ट्रिंग में भेज सुरक्षित रहने के लिए सांकेतिक शब्दों में बदलना, लेकिन क्योंकि यह उपयोगकर्ता से नहीं आती है EntityID एन्कोडिंग यकीनन को छोड़ दिया जा सकता है (मुझे लगता है), तो आप जानते हैं कि इसमें विशेष पात्र नहीं होंगे।

+2

एन्कोडुरि और एनकोडुरिकोम्पोनेंट कम से कम क्रोम/सफारी के मौजूदा संस्करणों पर नहीं, सिंगल कोट्स से बच नहीं पाएगा –

0

धन्यवाद mbrevoort को, मैं उसका जवाब के बारे में अधिक विस्तृत

जब आप = "T'via" empid = बच (empid)

एक प्रश्न empid में एक भी बोली भेज रहे हैं जब आप मिल मूल्य एक एकल उद्धरण var xxx = अनुरोध सहित।QueryString ("empid") xxx = unscape (xxx)

आप खोज/जो एक प्रश्न xxx में एक भी बोली में शामिल मान सम्मिलित करना चाहते हैं = बदलें (empid, " '" "' '")

0

बचने के लिए जावास्क्रिप्ट में एक भी उद्धरण का उपयोग

UpdateText.replace('\'', '\\\'') 

से बचने के लिए सभी एकल उद्धरण

UpdateText.replace(/'/g, '\\\'') 
3

का उपयोग AJAX अनुरोध में मूल्यों से बचने के लिए, ई का अपना स्वयं का कार्यान्वयन नहीं लिखते स्कैप या escape() विधि का उपयोग करें।(escape() बहिष्कृत है)। इसके बजाय एक JSON ऑब्जेक्ट बनाएं और JSON.stringify विधि का उपयोग करें।

अपने मामले के लिए ये ऐसा (अब के लिए गतिशील संपत्ति अनदेखी) होना चाहिए:

//Create Javascript object  
var obj = { SectionName: UpdateText, EntityID: EntityID }; 

अपने ajax अनुरोध में बाद में आप कर सकते हैं:

data: JSON.stringify(obj), 

आप गतिशील उपयोग करना चाहते हैं अपने JSON ऑब्जेक्ट के साथ गुण आपके विशेष मामले के लिए आप ऑब्जेक्ट को दो चरणों में बना सकते हैं जैसे:

var obj = { EntityID: EntityID }; 
obj["str_" + sectionName] = UpdateText; 

यह अभ्यास आपको एकल/डबल कोट्स और अन्य अमान्य वर्णों से मैन्युअल रूप से भागने से बचाएगा। JSON.stringify इसका ख्याल रखेगा।

(मैं यहाँ आया था में कुछ ऐसी ही जारी करने के लिए लग रही है, लेकिन एक उपयुक्त काम कर समाधान नहीं मिल सकता है, इसलिए यहाँ पोस्ट करने से समाप्त हो गया)

1

जब से तुम AJAX उल्लेख किया है, संभावना है कि तार है एकल उद्धरण शामिल सर्वर सर्वर पर खारिज कर रहे हैं। सुनिश्चित करें कि आप escape string function प्रदान करते हैं, उदाहरण के लिए php द्वारा, स्ट्रिंग डालने से पहले, डेटाबेस में।

$user_name = $_REQUEST['username']; 
$user_name = mysqli_real_escape_string($conn,$user_name); 
$query = "INSERT into chat(username,message) VALUES('".$user_name."')"; 

यह '$ user_name' स्ट्रिंग में दिखाई देने वाले किसी भी एकल या डबल कोट्स से बचने में मदद करता है। यह भी किसी भी तरह के एसक्यूएल इंजेक्शन atacks के खिलाफ रोकता है!