2009-09-19 16 views

उत्तर

15

इसे छोटा करने के लिए: आपको वास्तव में जीईटी या पोस्ट के माध्यम से आपकी PHP स्क्रिप्ट में पारित चर पर उपयोग किए जाने वाले एन्कोडिंग (वर्ण सेट) के बारे में वास्तव में पता नहीं है (विशेष रूप से यहां एक समस्या है)। सम्मेलन ब्राउज़र द्वारा action में निर्दिष्ट सर्वर-साइड संसाधन के लिए पोस्ट फॉर्म- पृष्ठ एन्कोडिंग का उपयोग करके योगदान दें जिसे http-equiv -meta-tag (charset-HTML5 में मेटा-टैग) या HTTP शीर्षलेख के माध्यम से निर्दिष्ट किया जा सकता है। वैकल्पिक रूप से कुछ ब्राउज़र accept-charset का भी सम्मान करते हैं-सही एन्कोडिंग को चुनते समय फॉर्म पर योगदान दें।

जीईटी पैरामीटर और यूआरएल का एन्कोडिंग ब्राउज़र स्टेटिंग पर निर्भर करता है और इसलिए उपयोगकर्ता द्वारा नियंत्रित किया जा सकता है। आपको एक विशिष्ट एन्कोडिंग पर भरोसा नहीं करना चाहिए।

आम तौर पर आप लगातार UTF-8 सब कुछ के लिए उपयोग कर और HTTP हेडर में सही एन्कोडिंग (Content-Type: text/html; charset=UTF-8) निर्दिष्ट करके सबसे एन्कोडिंग संबंधी समस्याओं से परिभ्रमण करेंगे - यह सब में सही एन्कोडिंग (UTF-8) निकलेगा वेरिएबल जो आपकी स्ट्रिंग में पास की जाती हैं (हम रूज स्क्रिप्ट्स के बारे में बात नहीं कर रहे हैं जो जानबूझकर एन्कोडिंग के साथ गड़बड़ करने की कोशिश करते हैं ताकि आपकी आक्रमण वैक्टरों को आपकी स्क्रिप्ट में अनुमति दी जा सके)। आपको अपने जीईटी पैरामीटर में या यूआरएल में गैर-एसीआई-अक्षरों पर भी भरोसा नहीं करना चाहिए (यही कारण है कि एसईओ-फ्रेंडली लिंक उन पात्रों को हटाते हैं या उन्हें प्रतिस्थापित करते हैं)।

यदि आप सुनिश्चित करते हैं कि यूटीएफ -8 एकमात्र अनुमत चरित्र सेट है तो आप उदाहरण के लिए एक चर की लंबाई जांचने के लिए mb_strlen($string, 'UTF-8') का उपयोग कर सकते हैं।

संपादित करें: (जोड़ा कुछ लिंक)

कुछ बातें आपको पढ़ने के लिए:

+0

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

5

यह जानने के लिए कि कौन सी एन्कोडिंग वर्तमान में सेट है, mb_internal_encoding का उपयोग करें। यदि आप एप्लिकेशन को विभिन्न एन्कोडिंग के लॉग का उपयोग करते हैं तो आपके पास mb_strlen का उपयोग करने के लिए बेहतर है।

चीयर्स

1

आमतौर पर आप के बाद से आप HTML आप ग्राहक के लिए भेज से $ _REQUEST बनाने वर्ण एन्कोडिंग का नियंत्रण है।

यानी: यह आपके द्वारा PHP से भेजे गए पृष्ठ द्वारा उत्पन्न होता है।

इस प्रकार आपको एन्कोडिंग का पता लगाना नहीं चाहिए।

mb_functions का उपयोग करने से मल्टीबाइट एक्सटेंशन को सक्षम करने की आवश्यकता होती है - इसलिए यदि आप कोड वितरित कर रहे हैं, तो आपको अवगत होना होगा कि सभी को यह नहीं होगा।

header('Content-Type: text/html; charset=UTF-8'); 

या HTML में:

<meta charset="utf-8"> 

http://www.w3.org/International/O-charset

संपादित करें: PHP6 utf-8 समर्थन, नहीं PHP5 है।

+0

"स्ट्रिंग कार्यों को UTF-8 संगत हैं" । क्या इसका मतलब है कि php5 में strlen utf8 स्ट्रिंग की सही लंबाई लौटाएगा? – lovespring

+0

"PHP5 के रूप में, स्ट्रिंग फ़ंक्शन यूटीएफ -8 संगत हैं।" यह निश्चित रूप से सही नहीं है। PHP के आंतरिक स्ट्रिंग फ़ंक्शन बाइट-लेवल पर काम करते हैं जिसका अर्थ है कि वे बहु-बाइट वर्णों (PHP <6 के लिए मान्य) से निपट नहीं सकते हैं। सभी आंतरिक कार्यों जहां उनके चरित्र के लिए एक वर्ण (बाइट्स में) की लंबाई महत्वपूर्ण है, वे चरित्र सेट के साथ काम करते समय त्रुटि-प्रवण होते हैं। उल्लिखित मल्टीबाइट-एक्सटेंशन (एमबी_ *) में ओवरलोडिंग-क्षमता है लेकिन मैं इसका उपयोग करने के खिलाफ दृढ़ता से सलाह देता हूं। –

+0

मैं वहां से रास्ता था, PHP5 में कोई मल्टीबाइट समर्थन नहीं है। – bucabay

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