2011-05-22 11 views
8

मैं सोच रहा था कि निम्नलिखित वाक्य का मतलब डमी के लिए सरल शब्दों में क्या है?PHP iconv_strlen() का अर्थ है प्रश्न

और बाइट अनुक्रम क्या है? और बाइट में कितने पात्र हैं?

iconv_strlen() counts the occurrences of characters in the given byte sequence str on the basis of the specified character set, the result of which is not necessarily identical to the length of the string in byte.

+1

वर्णों की गणना करता है, बाइट्स नहीं। जहां ascii के लिए बाइट और चरित्र गणना समान होगी। लेकिन नीचे दिए गए लेख को पढ़ें, इसके लायक है। –

उत्तर

12

के उदाहरण के लिए जापानी चरित्र लेते हैं 'こ'। यूटीएफ -8 एन्कोडिंग मानते हुए, यह एक 3 बाइट वर्ण (0xE3 0x81 0x93) है। चलो देखते हैं क्या होता है जब हम strlen बजाय का उपयोग करें:

$ php -r 'echo strlen("こ") . "\n";' 
3 

परिणाम 3 है, strlen के बाद से बाइट्स गणना कर रहा है। हालांकि, यह यूटीएफ -8 एन्कोडिंग के अनुसार केवल एक ही चरित्र है। यही वह जगह है जहां iconv_strlen आता है। यह जानता है कि यूटीएफ -8 में, यह एक एकल चरित्र है, भले ही यह 3 बाइट्स से बना हो। तो अगर हम इसके बजाय इसे आजमाएं:

$ php -r 'echo iconv_strlen("こ", "UTF-8") . "\n";' 
1 

हमें मिलता है 1. यही वह स्पष्टीकरण इंगित करने के लिए है।

1

एक स्ट्रिंग में बाइट्स में एक विशेष लंबाई है। उस स्ट्रिंग में वर्णों की संख्या बाइट्स की संख्या के बराबर होगी यदि केवल तभी प्रत्येक स्ट्रिंग में प्रत्येक वर्ण को एक बाइट द्वारा दर्शाया जाता है। यह सच है, उदाहरण के लिए, अंग्रेजी अक्षरों के लिए। प्रतिनिधित्व के लिए (यानी, एन्कोडिंग) जो कुछ या सभी वर्णों का प्रतिनिधित्व करने के लिए एक से अधिक बाइट का उपयोग करते हैं, वर्णों की संख्या बाइट्स की संख्या से कम होगी *। उदाहरण के लिए, बाइट के साथ सभी संभावित चीनी पात्रों का प्रतिनिधित्व करना संभव नहीं है।

तो, एन्कोडिंग दिया गया iconv_strlen, स्ट्रिंग में वर्णों की संख्या को गिनने का प्रयास करेगा। बाइट अनुक्रम स्ट्रिंग में बाइट्स का क्रम है। यूटीएफ 8 एन्कोडिंग का उपयोग करके चीनी युक्त एक स्ट्रिंग के लिए, उदाहरण के लिए, आपके पास 20-बाइट स्ट्रिंग हो सकती है जिसमें 14 वर्ण हैं।

* यदि एक चरित्र को एक से कम बाइट द्वारा दर्शाया जाता है तो यह और भी हो सकता है।

0

iconv_strlen() मायने रखता है पात्रों की घटनाओं को निर्दिष्ट वर्ण सेट के आधार पर दिए गए बाइट क्रम str में हैं, जिनमें से परिणाम जरूरी बाइट में स्ट्रिंग की लंबाई के समान नहीं है।

अनुवाद:

  • byte sequence: स्ट्रिंग है, जो एक (1 बाइट = 8 बिट) बाइट्स के अनुक्रम, उदा .: 01011010 00011001 01101011 है के लिए एक और शब्द। बाइट दृश्यों A तरह केरेक्टर को अभिव्यक्त, B, C आदि
  • character set: उर्फ ​​एन्कोडिंग, निर्दिष्ट करता है एक चरित्र के लिए कैसे एक बाइट नक्शे; जैसे 01000001the ASCII character set में दर्शाता है।
  • not necessarily identical to the length […] in byte: ASCII चरित्र सेट में, एक बाइट बिल्कुल एक चरित्र का प्रतिनिधित्व करता है। यह सभी चरित्र सेटों के लिए मामला नहीं है; कुछ में, तीन या अधिक बाइट्स का उपयोग एक चरित्र का प्रतिनिधित्व करने के लिए किया जाता है।ऐसा इसलिए है क्योंकि एक बाइट केवल 256 अलग-अलग मान रख सकता है और कुछ भाषाओं को 256 से अधिक वर्णों (जैसे चीनी और जापानी) का उपयोग करके लिखा जाता है। यूनिकोड भी एक ही चरित्र सेट में सभी मानव भाषाओं के सभी पात्रों को मैप करने का प्रयास करता है, जिसके लिए प्रति चरित्र एक से अधिक बाइट की आवश्यकता होती है।

सारांश में:

iconv_strlen() मायने रखता दिया स्ट्रिंग में वर्णों को ध्यान में वर्ण सेट लेने। इसलिए, वर्णों की संख्या बाइट्स की संख्या के बराबर नहीं हो सकती है।

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