सुनिश्चित करें कि आपने double_encode
सेट किया है करने के लिए false
, अन्यथा पहले से ही एन्कोडेड स्ट्रिंग्स को फिर से एन्कोड किया जाएगा, &
&
. में . फिर जब आप html_entity_decode
. का उपयोग करने के बाद इसे प्रदर्शित करने जाते हैं , ऐसा प्रतीत होगा जैसे यह अभी भी एन्कोड किया गया था।
अवांछित परिणाम:http://ideone.com/uQxuAM
htmlentities($string, ENT_QUOTES, 'UTF-8', false);
का उपयोग करना यह सुनिश्चित करेगा कि ऐसा नहीं होगा।
फिर html_entity_decode($string, ENT_QUOTES, 'UTF-8');
का उपयोग करें मान प्रदर्शित करने के लिए।
हालाँकि, MySQL डेटाबेस में डिकोड किए गए मानों को संग्रहीत करने में पूरी तरह से सक्षम है।
आप कभी भी अपने डेटाबेस में htmlentities-एन्कोडेड स्ट्रिंग्स को संग्रहीत नहीं करना चाहते हैं। क्या होता है जब आप एक CSV या PDF जनरेट करना चाहते हैं, एक ईमेल भेजना चाहते हैं, या कुछ भी जो HTML नहीं है?
इस तथ्य के अलावा कि आपको डेटा को एन्कोड करने की प्रोग्रामिंग को दोगुना करना है, डेटाबेस में डेटा की मात्रा में वृद्धि करना है, फिर भी आउटपुट को डीकोड करने की आवश्यकता है, ऑनलाइन बहुत सारे लेख हैं जो आपको जवाब क्यों नहीं देना चाहिए।
इसलिए आपको केवल HTML में परिणामी डेटा आउटपुट प्रदर्शित करने के लिए मानों को एन्कोड करने की आवश्यकता है।
इसके बजाय आपको mysqli_real_escape_string
. का उपयोग करके इनपुट से बचना चाहिए
$string = '<a href="/path/to/file?a=b&foo=bar#baz">My Link</a>';
$sql = "INSERT INTO links (link)"
. "VALUES(" . mysqli_real_escape_string($string) . "')";
या बेहतर अभी तक तैयार बयानों का उपयोग करें
$stmt = $mysqli->prepare("INSERT INTO links (link) VALUES(?)");
$stmt->bind_param("s", $string);
$stmt->execute();
फिर जो वास्तव में डेटाबेस में जोड़ा गया था उसे प्रदर्शित करने के लिए आउटपुट को एक सफल संदेश के रूप में प्रारूपित करने के लिए।
$html = "<div>Added Link: " . htmlentities($string, ENT_QUOTES, 'UTF-8', false) . "</div>";
अब html_entity_decode
. का उपयोग करने की कोई आवश्यकता नहीं है ब्राउज़र में एचटीएमएल प्रस्तुत करने के लिए।