2012-01-05 13 views
36

मैं जावास्क्रिप्ट समारोह मापदंडों में एकल उद्धरण से बचने के लिए इस से बचने की जरूरत:जावास्क्रिप्ट समारोह में एकल उद्धरण से बच पैरामीटर

onclick="Javascript:INSERT_PRODUCT('188267','WILL AND GRACE','32311','L'ANNIVERSARIO DINOZZE ','20101113|04|18|','13/11/2010 0.00.00','CANALE 5 ',this);" 

लेकिन मैं उन्हें एक समारोह कॉल के अंदर से बचने के लिए के बाद से मैं मान जो होगा पता नहीं है की जरूरत है पारित किया जाना चाहिए (डीबी चर मैं डेटाबेस से बच नहीं सकता)।

क्या कोई ऐसा कार्य है जो मुझे निम्न की तरह कुछ करने की अनुमति देता है?

onclick="Javascript:function(escape(param1), escape(param2), escape(param3));" 
+3

' '' = '\'' (बस के रूप में आप एक सामान्य स्ट्रिंग)। और क्योंकि आप इसे मार्कअप में डाल रहे हैं, या तो _you_ को इससे बचने की आवश्यकता होगी, या यदि सर्वर-साइड भाषा उत्पन्न हो रही है तो सुनिश्चित करें कि _it_ इससे बच निकलता है। –

+0

Yyou आपके पैरामीटर को 'एस्केप (पैराम)' –

+4

के अंदर रख सकता है लेबल 'जावास्क्रिप्ट:' की आवश्यकता नहीं है। आपको ईवेंट हैंडलर को बाध्य करने के अन्य तरीकों का उपयोग करना चाहिए: http://www.quirksmode.org/js/introevents.html, तो आपको उद्धरणों के बारे में चिंता करने की आवश्यकता नहीं है। –

उत्तर

9
बैकस्लैश apostrophe भागने

:

onclick="INSERT_PRODUCT('188267','WILL AND GRACE ','32311','L\'ANNIVERSARIO DI NOZZE ','20101113|04|18|','13/11/2010 0.00.00','CANALE 5 ',this);" 
+4

को निकाल दें 'जावास्क्रिप्ट: '। इसे वहां रखना गलत नहीं है, लेकिन इसका कोई उपयोग नहीं है और कम अनुभवी डेवलपर्स को लगता है कि इसकी आवश्यकता है। –

+2

मुझे माईफंक्शन कॉल के अंदर भागने के लिए एक फ़ंक्शन की आवश्यकता है क्योंकि यह एकमात्र जगह है जिसे मैं एक्सेस कर सकता हूं। कोई उपाय? –

+0

यह स्ट्रिंग विफल हो जाएगा यदि स्ट्रिंग में '" ','  ', '\' या एकल या डबल कोट्स या बैकस्लैश को एन्कोड करने वाली कोई अन्य इकाई शामिल है। उदाहरण के लिए, स्ट्रिंग '' foo 'onmouseover = alert (1)' में कोई नहीं है एकल उद्धरण, फिर भी जब एक HTML विशेषता में एम्बेडेड होता है, तो एक्सएसएस भेद्यता का फायदा उठाता है। इसी प्रकार, 'foo \' विफल हो जाएगा, क्योंकि जावास्क्रिप्ट पार्सर '\', '\ 'नहीं देखेगा, इसलिए करीबी बोली को स्ट्रिंग के हिस्से के रूप में व्याख्या किया जाएगा ताकि यदि अगला स्ट्रिंग मान' अलर्ट (1) है)// ', तब इसे शाब्दिक जावास्क्रिप्ट के रूप में माना जाएगा, जिसके परिणामस्वरूप मनमाने ढंग से स्क्रिप्ट निष्पादन भी होगा। –

18
JSON.stringify(plainTextStr).replace(/&/, "&").replace(/"/g, """) 

एक स्ट्रिंग आप सुरक्षित रूप से एक उद्धृत विशेषता में एम्बेड कर सकते हैं का उत्पादन करेगा और जो एक ही अर्थ है जब जावास्क्रिप्ट दुभाषिया के द्वारा देखा होगा।

केवल चेतावनी है कि कुछ Unicode नई-पंक्तियों (U + 2028 और U + 2029) need to be escaped से पहले जावास्क्रिप्ट स्ट्रिंग शाब्दिक में एम्बेडेड किया जा रहा है, लेकिन JSON केवल आवश्यकता है कि \r और \n भाग निकले जा।

0

यदि मैं आपको सही ढंग से समझ रहा हूं, तो मुझे विश्वास नहीं है कि आप जो करने की कोशिश कर रहे हैं वह संभव है। आपको सर्वर की तरफ उद्धरण से बचने की आवश्यकता होगी। कोई भी फ़ंक्शन जो आपके लिए उद्धरण से बच जाएगा, वह एक फ़ंक्शन होगा जो एक वैध स्ट्रिंग की आवश्यकता होगी, जिसका अर्थ है कि इसे फ़ंक्शन में पारित होने से पहले भागने की आवश्यकता होगी।

7

शायद यह सवाल से पूरी तरह से स्पष्ट नहीं है, लेकिन यह मानते हुए कि आप इसे चाहते हैं कि डेटाबेस में संग्रहीत करने के लिए इसे PHP स्क्रिप्ट पर भेजना है, आप निश्चित रूप से stripslashes() जैसे PHP के विभिन्न तरीकों का उपयोग करेंगे - लेकिन यदि आप वास्तव में बहुत फैंसी पाने की कोशिश नहीं कर रहे हैं, बस किसी भी एकल उद्धरण के सामने 1 स्लैश जोड़ना क्लाइंट-साइड से PHP में एक SQL क्वेरी भेजने के लिए पर्याप्त है। यह सुरक्षित नहीं है, लेकिन शायद आवश्यक नहीं है।

str.replace(/'/g, "\\'"); // escaping \ with \, so used 2x 

काम कर देता है, कुछ इस तरह में उदाहरण के लिए:।

var body = $('#body').val().replace(/'/g, "\\'"); 
myCustomSQLqueryFunction("UPDATE mytable SET `content`='"+ body +"';"); 

MySQL अब अपनी body स्टोर करेगा की तरह आप इसे फ़ॉर्म फ़ील्ड में देखते हैं।

+0

मैं इसका परीक्षण कर रहा था और देखा कि MySQL बस फैंसी सिंगल कोट्स को हटा देता है जैसे कि आपको भी उनसे बचाना होगा। – tim

3

इस समारोह मुझे (यह दूर करता है और बोली फिर से पुनर्स्थापित करता है) के लिए काम किया:, अनुमान है कि डेटा भेजे जाने के लिए एक इनपुट तत्व का मान है

var Url = encodeURIComponent($('#userInput').val().replace("'","\\'")); 

फिर मूल पाठ फिर से मिलता है:

var originalText = decodeURIComponent(Url); 
1
var cmpdetail = cmpdetail.replace(/'/g, "\\'"); 

मेरे लिए काम कर रहे।

0

मैं जावास्क्रिप्ट तारों को परिभाषित करने के लिए एकल उद्धरण का उपयोग करना पसंद करता हूं। फिर मैं अपने एम्बेडेड डबल कोट्स से बचता हूं।

मैं यह कैसे करता हूं, मूल रूप से str.replace(/[\""]/g, '\\"')

var display = document.getElementById('output'); 
 
var str = 'class="whatever-foo__input" id="node-key"'; 
 
display.innerHTML = str.replace(/[\""]/g, '\\"'); 
 

 
//will return class=\"whatever-foo__input\" id=\"node-key\"
<span id="output"></span>

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