2012-12-17 9 views
6

हाँ: मुझे पता है। जब हम multibyte char के साथ काम कर रहे हों तो हमें mb_ * फ़ंक्शन का उपयोग करना चाहिए। लेकिन जब हम स्ट्रॉप्स का उपयोग कर रहे हैं? चलो एक नज़र इस कोड को ले चलते हैंmb_strpos बनाम स्ट्रॉस, क्या अंतर है?

var_dump(strpos("My symbol utf-8 is the €.", "\xE2\x82\xAC")); // int(23) 

वहाँ mb_strpos का उपयोग करने का एक अंतर है (UTF-8 में बचाया)? यह काम एक ही काम नहीं करता है? आखिरकार, स्ट्रॉसएक स्ट्रिंग (एकाधिक बाइट) की तलाश है? क्या इसके बजाय स्ट्रॉप्स का उपयोग करने का कोई कारण है?

+1

यह मदद कर सकता है :: http://stackoverflow.com/questions/ 5712226/जब-चाहिए-ए-उपयोग MB-strpos-ओवर-strpos –

उत्तर

11

यूटीएफ -8 के लिए, बाइट अनुक्रम से मिलान करना बिल्कुल वर्ण अनुक्रम के समान ही है।

तो वे दोनों वास्तव में एक ही बिंदु पर सुई पाते हैं, लेकिन जाएगा mb_strpos मायने रखता है पूर्ण UTF-8 बाइट sequencees से पहले सुई है, जहां के रूप में strpos किसी भी बाइट गणना करता है। इसलिए यदि आपके स्ट्रिंग एक और मल्टी-बाइट UTF-8 अनुक्रम था, परिणाम अलग होगा:

strpos("My symbolö utf-8 is the €.", "€") !== mb_strpos("My symbolö utf-8 is the €.", "€", 0, "UTF-8") 

लेकिन:

strpos("My symbol utf-8 is the €.", "€") === mb_strpos("My symbol utf-8 is the €.", "€", 0, "UTF-8") 
5

उपयोग में वर्ण सेट और स्ट्रिंग की खोज के आधार पर, इससे कोई फर्क नहीं पड़ता है या नहीं।

strpos() सुई के रूप में पारित बाइट अनुक्रम की तलाश करता है।

mb_strpos() वही बात लेकिन यह चरित्र सीमाओं का भी सम्मान करता है।

तो strpos() मिलान करेगा यदि बाइट अनुक्रम स्ट्रिंग में कहीं भी होता है। mb_strpos() केवल तब मेल खाएगा जब बाइट अनुक्रम भी पूर्ण वर्णों के एक वैध सेट का प्रतिनिधित्व करता है।

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