PHP के HTMLentities फ़ंक्शन के माध्यम से एक स्ट्रिंग चलाने की कोशिश करते समय, मेरे पास कुछ ऐसे मामले हैं जहां मुझे 'अमान्य मल्टीबाइट अनुक्रम' त्रुटि मिलती है। इस त्रुटि को होने से रोकने के लिए फ़ंक्शन को कॉल करने से पहले स्ट्रिंग को साफ़ करने का कोई तरीका है?htmlentities 'अमान्य मल्टीबाइट अनुक्रम' त्रुटि
उत्तर
PHP 5.3.0 और नीचे के लिए, htmlentities()
के लिए डिफ़ॉल्ट वर्णसेट आईएसओ -885 9 -1 है। (Manual)
आप शायद इसे यूटीएफ -8 स्ट्रिंग पर लागू कर रहे हैं।
htmlentities($string, (whatever), "UTF-8");
PHP 5.4.0 के बाद से वर्ण सेट निर्दिष्ट करें, डिफ़ॉल्ट वर्णसेट यूटीएफ -8 है।
मुझे उन परिदृश्यों का सामना करना पड़ा है जहां यूटीएफ -8 निर्दिष्ट करने के लिए पर्याप्त नहीं है और ENT_IGNORE विकल्प उपयोगी पाया गया है। मुझे नहीं लगता कि यह htmlentities के लिए दस्तावेज है, केवल HTMLspecialchars के लिए, लेकिन यह त्रुटि को बाधित करने में काम करता है।
सामान्य में display_errors की स्थापना आरं php नियंत्रित करने के लिए त्रुटियों ब्राउज़र को उत्पादन कर रहे हैं कि क्या किया जा सकता है, आरं सेटिंग log_errors स्वतंत्र रूप से है कि क्या त्रुटियों लॉगफ़ाइल के लिए लिखा जाता नियंत्रित करने के लिए इस्तेमाल किया जा सकता है, और एक कस्टम अगर त्रुटि हैंडलर set_error_handler() के साथ सेट किया गया है, तो इसे हमेशा सभी त्रुटियों के लिए बुलाया जाता है और कर सकते हैं तो त्रुटि_reporting() के मान के साथ display_errors और log_errors के मानों को पढ़ें और कार्रवाई का उपयुक्त तरीका लें, सही?
गलत! इस मामले में, htmlspecialchars() और htmlentities() केवल त्रुटि को ट्रिगर करते हैं यदि display_errors का मान गलत है। यदि display_errors का मान सत्य है तो कोई भी त्रुटि ट्रिगर नहीं होती है! यह प्रतीत होता है कि यह अनौपचारिक व्यवहार डिस्प्ले_एरर्स के साथ डिबगिंग के दौरान इन त्रुटियों को पहचानना असंभव बनाता है।
इसे इंगित करने के लिए धन्यवाद - यह बताता है कि मैंने केवल इस त्रुटि को उत्पादन पर क्यों देखा! मुझे पता नहीं लगा कि क्यों, मेरे विकास बॉक्स पर, जहां सभी त्रुटि रिपोर्टिंग _ON_ चालू हो गई है, मैं त्रुटि को पुन: उत्पन्न नहीं कर सका। – thaddeusmt
आप स्ट्रिंग आप जाँच करना चाहते हैं में कहीं substr का उपयोग करते हैं। मैं सुझाव देता हूं कि एक विकल्प के रूप में mb_substr का उपयोग करें। समस्या यह है कि सबस्ट्रेट यूनिकोड को अवगत नहीं है। तो, यह सिर्फ आपके बहु बाइट चरित्र सेट में बाइट्स को बंद कर रहा है।
पीएचपी 5.4 के रूप में आप ठीक ढंग से बचने के लिए निम्नलिखित उत्पादन के साथ कुछ का उपयोग करना चाहिए:
$escapedString = htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE | ENT_DISALLOWED | ENT_HTML5, $stringEncoding);
ENT_SUBSTITUTE
(कोई रिक्त स्ट्रिंग लौटने के बजाय) द्वारा अवैध कोड इकाई दृश्यों बदल देता है।
ENT_DISALLOWED
निर्दिष्ट बिंदुओं में अमान्य हैं जो कोड बिंदुओं को प्रतिस्थापित करता है।
ENT_HTML5
प्रयुक्त कार्यप्रणाली निर्दिष्ट करता है। आप जो उपयोग कर रहे हैं उसके आधार पर आप ENT_HTML401
, ENT_XHTML
या ENT_XML1
चुन सकते हैं।
उन विकल्पों का उपयोग करके आप सुनिश्चित करते हैं कि नतीजे आपके द्वारा प्राप्त किए गए घृणास्पद इनपुट के बावजूद दिए गए सिद्धांत में हमेशा वैध होते हैं।
इसके अलावा, $stringEncoding
निर्दिष्ट करना न भूलें। डिफ़ॉल्ट पर निर्भर करना एक बुरा विचार है क्योंकि यह ini
सेटिंग्स पर निर्भर करता है और संस्करणों के बीच (और किया) बदल सकता है।
PHP दस्तावेज़ इसके बारे में अस्पष्ट है, लेकिन HTMLspecialchars के लिए 'ENT_HTML5' अनावश्यक है। Http://stackoverflow.com/a/14532168/427545 – Lekensteyn
@Lekensteyn 'ENT_HTML5' अनावश्यक नहीं है, खासकर जब 'ENT_DISALLOWED' का उपयोग किया जाता है। यह उन कोड पॉइंट्स को प्रतिस्थापित करेगा जो एचटीएमएल 5 डॉकटाइप में यूनिकोड रिप्लेसमेंट कैरेक्टर के साथ अमान्य हैं। जैसे यह उदाहरण देखें: http://codepad.viper-7.com/q5bPMQ 'ENT_HTML5 | ENT_DISALLOWED' सुनिश्चित करता है कि आउटपुट में कोई अमान्य कोडपॉइंट नहीं है। – NikiC
सुधार के लिए धन्यवाद, मैंने अमान्य वर्णों को ध्यान में रखने के लिए अपना जवाब विस्तारित किया है। सबसे पहले मुझे डिस्लोवेड और सबट्यूट के बीच का अंतर नहीं पता था, लेकिन अब यह मेरे लिए स्पष्ट हो गया है। – Lekensteyn
html_entities ($ चर, ENT_QUOTES); हमेशा मेरे लिए ठीक काम करता है।
php के कुछ संस्करणों में डिफ़ॉल्ट एन्कोडिंग iso-something-something है, और केवल बाद में php 5.4 में यह utf-8 है। ध्यान दें कि परवाह किए बिना, यह संस्करणों के अनुरूप नहीं है, इसलिए वास्तव में उपयोग में आने वाले एन्कोडिंग का मिलान करने के लिए एन्कोडिंग निर्दिष्ट करना सबसे अच्छा है। – Kzqai
ध्यान दें कि utf-8 का उपयोग करके multibyte स्ट्रिंग फ़ंक्शंस को सक्षम करने की आवश्यकता है। इसका मतलब mb_substr के साथ सबस्ट्रेट जैसे कार्यों को प्रतिस्थापित करना हो सकता है, सिवाय इसके कि php एमबी समकक्ष के साथ उन कार्यों के अधिभार को चालू करने के लिए एक php ini सेटिंग प्रदान करता है।
और अधिक विस्तार के लिए यहाँ देखें: http://www.php.net/manual/en/mbstring.overload.php
- 1. CMake त्रुटि: अमान्य एस्केप अनुक्रम \ यू
- 2. रेल 3 अमान्य मल्टीबाइट चार (यूएस-एएससीआईआईआई)
- 3. त्रुटि() अमान्य multibyte स्ट्रिंग
- 4. यूटीएफ -8 त्रुटि में रेल, हेरोकू और अमान्य बाइट अनुक्रम
- 5. PGError: त्रुटि: एन्कोडिंग के लिए अमान्य बाइट अनुक्रम "यूटीएफ 8
- 6. पीएचपी अमान्य वर्ण त्रुटि
- 7. मल्टीबाइट टॉवाइडर
- 8. यूनिकोड और जावास्क्रिप्ट: अमान्य बाइट अनुक्रम
- 9. हैकेल - अमान्य कोड पेज बाइट अनुक्रम
- 10. डालने पर पोस्टग्रेस त्रुटि - त्रुटि: एन्कोडिंग "यूटीएफ 8" के लिए अमान्य बाइट अनुक्रम: 0x00
- 11. ऐप सबमिशन त्रुटि - अमान्य बाइनरी - अमान्य कोड साइनिंग त्रुटि
- 12. pyPdf त्रुटि अमान्य तर्क
- 13. PHP htmlentities फॉर्म
- 14. php 5.4 के htmlentities
- 15. htmlentities बनाम addslashes mysqli_real_escape_string
- 16. PHP में मल्टीबाइट ट्रिम?
- 17. अनुक्रम त्रुटि। अनुक्रम संख्या की अनुमति नहीं है
- 18. जेएस फ़ाइल पर स्पॉकेट एन्कोडिंग त्रुटि: अमान्य यूटीएफ -8 बाइट अनुक्रम
- 19. "निर्दिष्ट '@notify_email_operator_name' अमान्य है" त्रुटि
- 20. ORA 00904 त्रुटि: अमान्य पहचानकर्ता
- 21. System.ArgumentException: अमान्य JSON आदिम त्रुटि
- 22. Unpickling त्रुटि अमान्य लोड कुंजी, '{'
- 23. अमान्य एईएस कुंजी लंबाई त्रुटि
- 24. त्रुटि: अमान्य PathExpression। एक StateFieldPathExpression
- 25. सिंटैक्स त्रुटि: अमान्य वर्ण '\ u8203'
- 26. xml पार्स त्रुटि: 'अमान्य वर्ण'
- 27. Haskell "अमान्य प्रकार हस्ताक्षर त्रुटि"
- 28. आईट्यून्स में अमान्य द्विआधारी त्रुटि
- 29. filter_var बनाम htmlentities बनाम htmlspecialchars
- 30. htmlentities और é (e तीव्र)
मैं जानता हूँ कि यह एक पुराने विषय है, लेकिन मैं इस समस्या के पार भी आया था और सोचा था कि यह देखते हुए कि ENT_IGNORE के उपयोग अनुशंसित नहीं है यह सुरक्षा के प्रभाव के रूप में हो सकता है लायक हो सकता है: http://unicode.org/reports/tr36/#Deletion_of_Noncharacters – Dean
हाँ, इस समय, इस समस्या के लिए ENT_IGNORE एकमात्र फ़िक्स (/ हैक) था। – Kzqai