2009-11-20 16 views
6

मैं कैसे यह संभव उपयोगकर्ताओं के " '(दोहरे उद्धरण) किसी पाठ फ़ील्ड के अंदर का उपयोग करने के लिए कर सकते हैं ...'इनपुट प्रकार =' टेक्स्ट '' मान में डबल कोट्स का उपयोग नहीं किया जाता है, स्ट्रिंग डबल-कोट पर रुक जाती है!

जब भी मैं तो क्षेत्र (मूल्य) में दोहरे-उद्धरण का उपयोग करें जब में चर प्राप्त करना मेरे PHP फ़ाइल के साथ:

$text=mysql_real_escape_string($_POST['subject']); 

और फिर इसे गूंज, मैं एक स्ट्रिंग जो ठीक से बच रहा है मिलता है, लेकिन स्ट्रिंग दोहरे-उद्धरण

मैं न इसकी वजह से बंद करना चाहते हैं इससे पहले कि वास्तव में बंद हो जाता है! दोहरे-उद्धरण हालांकि!

जावास्क्रिप्ट का उपयोग टेक्स्ट-फ़ील्ड को सत्यापित करने के लिए किया जाता है, इसलिए यह खाली नहीं है, शायद मुझे सत्यापित करते समय जावास्क्रिप्ट के साथ कुछ और करना चाहिए, और मान को बदलना, तो PHP को डबल कोट्स सहित सही मान मिल सकता है?

धन्यवाद

अद्यतन

कोड:

$headline= mysql_real_escape_string($_POST['headline']); 
    echo htmlentities($headline); 

मैं ऊपर दो विलय की कोशिश की है, केवल एक ही परिणाम दे देंगे। नोट:

+ , . ; : - _ space & % ! ? = # * ½ @/\ [ ]< > " ' hej hej 

इच्छा उत्पादन इस जब यह गूंज:

+ , . ; : - _ space & % ! ? = # * ½ @/\\ [ ]< > 
+0

कृपया इसके लिए जावास्क्रिप्ट का उपयोग न करें। यह कुछ भी नहीं करेगा जो आपको सर्वर-साइड पर नहीं करना चाहिए। –

उत्तर

20

आप उपयोग करने के लिए मैं भी डाला गया है htmlentities समारोह में ENT_QUOTES जोड़ने की कोशिश की है ...

अस्वरूपित स्ट्रिंग htmlspecialchars($str, ENT_QUOTES) या htmlentities($str, ENT_QUOTES) HTML इकाई &quot; को उद्धरण कन्वर्ट करने के लिए। वे कार्य अन्य पात्रों का भी ख्याल रखते हैं जिन्हें एन्कोड किया जाना चाहिए।

mysql_real_escape_string() केवल डेटाबेस क्वेरीज़ में सिंगल कोट्स से बचने के लिए है, ताकि आप अपने डेटाबेस में सिंगल कोट्स के साथ स्ट्रिंग्स को सही ढंग से दर्ज कर सकें (और एसक्यूएल इंजेक्शन से बचें)।

संपादित करें: जोड़ा मानकों। धन्यवाद micahwittman को

+0

यह एक डबल-कोट प्रदर्शित नहीं करेगा, यह केवल बैकस्लाश प्रदर्शित करता है ... मेरा अपडेट पढ़ें plz –

+0

आपको इस तरह की htmlentities के लिए वैकल्पिक दूसरे पैरामीटर का उपयोग करने की आवश्यकता है: echo htmlentities ($ headline, ENT_QUOTES); जो डबल और सिंगल कोट्स को एन्कोड करेगा (http://php.net/manual/en/function.htmlentities.php पर ENT_QUOTES के अलावा अन्य विशेष स्थिरांक देखें)। साथ ही, आपको केवल mysql डेटाबेस में स्ट्रिंग को स्टोर करने की तैयारी के लिए sql_real_escape_string() का उपयोग नहीं करना चाहिए - यही कारण है कि \ \ बन रहा है। – micahwittman

1

इसकी नहीं जे एस का काम इनपुट स्ट्रिंग को संशोधित करने के लिए, सर्वर यकीन है कि यह क्या इसकी परवाह किए बिना हो रही स्वीकार कर सकते हैं बनाना चाहिए।

आप अपने mysql एस्केप फ़ंक्शन में इसे पार करने से पहले किसी अन्य मूल्य या तो एसीआई प्रतीक या HTML &quot; आदि के साथ डबल कोट्स से बच सकते हैं?

3

जब आप इसे input में आउटपुट करते हैं तो यह काम नहीं कर रहा है क्योंकि value उद्धरण पर छोटा किया जा रहा है। आपको आउटपुट पर htmlspecialchars() का उपयोग करने की आवश्यकता होगी।

2

आप दो चीजों को मिश्रण कर रहे हैं: mysql_real_escape_string एक mysql डेटाबेस में संग्रहीत करने के लिए तार तैयार करने के लिए प्रयोग किया जाता है। htmlentities ब्राउज़र में गूंजने के लिए तार तैयार करने के लिए प्रयोग किया जाता है। दोनों करना महत्वपूर्ण है, लेकिन एक ही स्ट्रिंग पर दूसरे के बाद एक को कॉल करने की उम्मीद नहीं की जा सकती है।निम्न की तरह कुछ करें:

// Copy string after escaping for mysql into $db_headline 
$db_headline= mysql_real_escape_string($_POST['headline']); 

// Copy string after escaping for page display into $html_headline 
$html_headline = htmlentities($_POST['headline']); 

// Store the headline in the database 

... 

?> 
<input type="text" name="headline" value="<?php echo $html_headline ?>" /> 

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