strlen()
मल्टीबाइट वर्णों को सही ढंग से संभाल नहीं रहा है, क्योंकि यह मानता है कि 1 char बराबर 1 बाइट है, जो यूनिकोड के लिए बस अमान्य है। यह व्यवहार यहाँ प्रलेखित है: http://php.net/strlen
strlen() रिटर्न बजाय एक स्ट्रिंग में वर्णों की संख्या बाइट की संख्या।
समाधान mb_strlen()
समारोह के बजाय (multi byte
के लिए mb
खड़ा) (see mb_strlen() docs) का प्रयोग है।
संपादित
हैं के लिए कोड में किसी भी कारण से परिवर्तन संभव/साध्य नहीं है, एक स्ट्रिंग कार्यों सुनिश्चित करने के लिए चाहते हो सकता है स्वचालित रूप से मल्टी-बाइट समकक्षों द्वारा अतिभारित रहे हैं। यह PHP और documented here द्वारा समर्थित है।
कृपया ध्यान दें कि एमबी_स्ट्रिंग काम करने के लिए आप अपने php.ini
को भी संपादित करना चाहेंगे। उपलब्ध सेटिंग्स documented here हैं।
स्रोत
2013-04-05 08:51:25
में बाइट की संख्या की गणना करेगा, मुझे आश्चर्य है कि यूनिकोड/गैर-यूनिकोड फ़ंक्शंस को अलग करने के लिए विशिष्ट बिंदु क्या है? हमेशा '(mb_)' फ़ंक्शंस का उपयोग क्यों न करें? –
संक्षेप में - ऐसा इसलिए है क्योंकि PHP डिज़ाइन (भाषा के रूप में) कई स्थानों पर बेकार है और इसमें यूटीएफ 8 समर्थन भी शामिल है। PHP उम्र के लिए आंतरिक रूप से multibyte एन्कोडिंग का समर्थन नहीं कर रहा था, और यही कारण है कि multibyte एक्सटेंशन बनाया गया था। आप फ़ंक्शन ओवरलोडिंग का उपयोग करके PHP द्वारा स्वचालित रूप से 'mb_' का उपयोग कर सकते हैं -> http://php.net/manual/en/mbstring.overload.php देखें लेकिन यह PHP कॉन्फ़िगरेशन पर निर्भर करता है, इसलिए कभी-कभी' mb_ ' 'अगर आप यह सुनिश्चित नहीं कर सकते कि इसका इस्तेमाल अन्य तरीकों से किया जाएगा। –
स्पष्टीकरण के लिए धन्यवाद, मेरे दोस्त, और विशेष रूप से 'अधिभार 'पर इंगित करने के लिए, पूरी तरह से याद किया .. चीयर्स! –