2011-06-07 21 views
48

मैं कुछ जावास्क्रिप्ट कोड लिख रहा हूं जो PHP के साथ प्रस्तुत स्ट्रिंग का उपयोग करता है। मैं अपने PHP स्ट्रिंग में सिंगल कोट्स (और केवल सिंगल कोट्स) से कैसे बच सकता हूं?मैं केवल एक उद्धरण से कैसे बचूं?

<script type="text/javascript"> 
    $('#myElement').html('say hello to <?php echo $mystringWithSingleQuotes ?>'); 
</script> 
+8

आपको एकल से अधिक उद्धरणों से बचने की आवश्यकता होगी। एक के लिए, न्यूलाइन। आप 'addcslashes ($ mystringWithSingleQuotes,' '\ "\ r \ n \\\ t \ 0 .. \ 37")' –

+2

जैसे कुछ से कुछ ठीक कर सकते हैं जैसे स्वयं से बचने के बजाय, 'json_encode() 'का उपयोग करने के लिए एक वैध जावास्क्रिप्ट स्ट्रिंग (और अपने बाहरी सिंगल कोट्स को हटा दें) – mario

+1

@ फ्रैंक: क्या आप टिप्पणी के बजाए अपना उत्तर उत्तर के रूप में पोस्ट कर सकते हैं? टिप्पणियों में उचित उत्तरों का चयन नहीं किया जा सकता है और इसलिए नकली "अनुत्तरित प्रश्न" बनाते हैं। – Sylverdrag

उत्तर

49
काफी बस

: echo str_replace('\'', '\\\'', $myString); हालांकि, मैं JSON के उपयोग और json_encode() समारोह के रूप में इसे और अधिक हो जाएगा सुझाव देंगे भरोसेमंद (उदाहरण के लिए नई लाइनों का उद्धरण):

<?php $data = array('myString' => '...'); ?> 

<script> 
    var phpData = <?php echo json_encode($data) ?>; 
    alert(phpData.myString); 
</script> 
+1

सही नहीं .. मुझे यह पता था लेकिन मुझे समस्या का सामना करना पड़ रहा था क्योंकि मैं 'JSON.parse (' ');' और यह असफल रहा क्योंकि डेटा के अंदर एक ही उद्धरण था। बाद में मुझे पता चला कि यहां 'JSON.parse' का उपयोग करने की आवश्यकता नहीं है। –

+4

सभी उत्तर जो' str_replace (" '', "\\ '", $ स्ट्रिंग)' और सिमी लार गलत हैं। स्ट्रिंग पर विचार करें \ 'इसे \\' के साथ बदल दिया जाएगा और इससे इंजेक्शन भेद्यता हो जाएगी। क्रोजिन सुझाव के रूप में json_encode का उपयोग करें। –

+0

json_encode आपको परेशानी में डाल सकता है यदि जेसन एक्सटेंशन इंस्टॉल नहीं किया गया था। Strtr (..) –

9

केवल एकल उद्धरण बदलने के लिए, इस सरल बयान का उपयोग करें:

$string = str_replace("'","\\'", $string); 
+0

वाह इसने mgic_qoute – AlexJaa

+0

के बारे में मेरी समस्या हल की है, मुझे एंड्रॉइड "# 039" सही नहीं है – delive

0

यह सुनिश्चित नहीं है कि आप अपने डेटा के साथ वास्तव में क्या कर रहे हैं, लेकिन आप हमेशा कोशिश कर सकते हैं:

$ string = str_replace ("'", "% 27", $ string);

जब भी स्टोरेज के लिए स्ट्रिंग को डेटाबेस में भेजा जाता है तो मैं इसका उपयोग करता हूं। % 27 'चरित्र के लिए एन्कोडिंग है, और यह आपके सर्वर पर भेजे गए स्ट्रिंग में एक एकल वर्ण मौजूद है, तो यह GET अनुरोधों में व्यवधान को रोकने में भी मदद करता है। यदि कोई व्यक्ति आपके PHP फ़ंक्शन में मैन्युअल रूप से कुछ डेटा भेजने की कोशिश करता है तो मैं केवल जावास्क्रिप्ट और PHP दोनों में% 27 के साथ प्रतिस्थापित करूंगा। इसे अपने अंतिम उपयोगकर्ता के लिए सुंदर बनाने के लिए, बस अपने सर्वर से वापस आने वाले सभी डेटा के लिए एक व्यस्त प्रतिस्थापन फ़ंक्शन चलाएं और सभी% 27 सबस्ट्रिंग को 'के साथ बदलें।

मुबारक इंजेक्शन से परहेज!

0

यहां बताया गया है कि मैंने यह कैसे किया। मूर्ख, लेकिन सरल।

$singlequote = "'"; 
$picturefile = getProductPicture($id); 

echo showPicture('.$singlequote.$picturefile.$singlequote.'); 

मैं HTML कि एक तस्वीर दिखाने के लिए जावा स्क्रिप्ट कोड कहा जाता outputting पर काम कर रहा था ...

1

एक लंबे समय के इस समस्या से लड़ने के बाद, मुझे लगता है कि बेहतर समाधान मिल गया है।

दो कार्यों को संयोजित करें एचटीएमएल के रूप में उपयोग करने के लिए एक स्ट्रिंग से बचें।

यदि आप किसी जावास्क्रिप्ट फ़ंक्शन कॉल के अंदर स्ट्रिंग का उपयोग करते हैं, और अन्य एकल उद्धरण से बचने के लिए तर्क के चारों ओर जाने वाले उन सरल उद्धरणों से बचने के लिए डबल कोट से बचने के लिए एक को छोड़ दें।

समाधान:

mysql_real_escape_string(htmlspecialchars($string)) 

का समाधान:

  • एक php तरह

गूंज 'onclick = "javascript_f एक जावास्क्रिप्ट समारोह कॉल करने के लिए बनाया गर्मजोशी (\ '।mysql_real_escape_string (htmlspecialchars ($ स्ट्रिंग)) "

9

कुछ मामलों में, मैं सिर्फ यह संस्थाओं में परिवर्तित:

      //i.e. $x= ABC\DEFGH'IJKL 
$x= str_ireplace("'", "&apos;", $x); 
$x= str_ireplace("\\", "&bsol;", $x); 
$x= str_ireplace('"', "&quot;", $x); 
HTML पृष्ठ पर

, दृश्य उत्पादन ही है:

ABC\DEFGH'IJKL 

तथापि , यह स्रोत में sanitized है।

0

मैंने निम्नलिखित कार्य लिखा है। यह निम्नलिखित को प्रतिस्थापित करता है:

एकल कोट [ '] स्लैश और एकल उद्धरण [\ के साथ']

बैकस्लैश [\] के साथ दो बैकस्लैश [\\]

function escapePhpString($target) { 
    $replacements = array(
      "'" => '\\\'', 
      "\\" => '\\\\' 
    ); 
    return strtr($target, $replacements); 
} 

आप में जोड़ने के लिए या चरित्र प्रतिस्थापन दूर करने के लिए संशोधित कर सकते हैं $ प्रतिस्थापन सरणी। उदाहरण के लिए, \ r \ n को प्रतिस्थापित करने के लिए यह "\ r \ n" => "\ r \ n" और "\ n" => "\ n" बन जाता है।

/** 
* With new line replacements too 
*/ 
function escapePhpString($target) { 
    $replacements = array(
      "'" => '\\\'', 
      "\\" => '\\\\', 
      "\r\n" => "\\r\\n", 
      "\n" => "\\n" 
    ); 
    return strtr($target, $replacements); 
} 

स्ट्रेट के बारे में साफ सुविधा यह है कि यह लंबी प्रतिस्थापन पसंद करेगी। उदाहरण, "कूल \ r \ n फ़ीचर" \ n \ n से बचने के बजाय \ r \ n से बच जाएगा।

6

आप एक \ आप उदाहरण के लिए addcslashes() है अगर आप सवाल की तरह केवल एकल उद्धरण आप कर सकते हैं से बचने के लिए चाहते हैं के साथ वर्ण से बचने के लिए चाहते हैं:

echo addcslashes($value, "'"); 

और अगर आप बचना चाहते ', ", \ और nul (बाइट नल) आप addslashes() उपयोग कर सकते हैं:

echo addslashes($value); 
+1

मनमाना वर्णों से बचने के लिए [addcslashes] (http://php.net/manual/en/function.addcslashes.php) को इंगित करने के लिए धन्यवाद। –

0

मैं जानता हूँ कि मैं पार्टी के लिए देर से कर रहा हूँ। लेकिन आप ऐसा करने के लिए addcslashes फ़ंक्शन का उपयोग कर सकते हैं,

echo addcslashes($text, "'\\"); 
संबंधित मुद्दे