2011-11-22 8 views
47

PHP में iconv() और mb_convert_encoding() के बीच क्या अंतर है? क्या कोई बेहतर, तेज, आदि करता है (उदाहरण के लिए विशिष्ट एन्कोडिंग के साथ)? दूसरे परिस्थितियों में किस स्थिति में प्राथमिकता दी जाएगी?PHP में iconv() और mb_convert_encoding() के बीच क्या अंतर है?

iconv()

  1. पीएचपी का सबसे इंस्टॉल किए जाने के साथ शामिल:

    यहाँ मैं क्या लगता है कि मैं पहले से ही पता है।

  2. जब वर्ण जिन्हें नए वर्ण सेट में मैप नहीं किया जा सकता है, तो आप निर्दिष्ट कर सकते हैं कि क्या उन्हें 'समान' वर्ण में परिवर्तित किया गया है या अनदेखा किया गया है।

mb_convert_encoding()

  1. आमतौर पर php-mbstring एक्सटेंशन को इंस्टॉल करने की आवश्यकता है।
  2. वेब हेक्स कोड से कनवर्ट करने के लिए HTML-ENTITIES को संभालने में सक्षम है।

क्या अन्य अंतर हैं?

+0

संबंधित: http://stackoverflow.com/questions/4050754/iconv-or-mbstring –

+0

यह कहा नहीं जा सकता है अगर और जब उन कार्यों के किसी भी है क्योंकि आप जो साझा नहीं किया आप के लिए एक समस्या पेश करेंगे * कंक्रीट * आप चलने वाली समस्याएं। किसी भी प्रकार के कार्य के साथ, यह केवल एक निश्चित नौकरी करता है। यदि आप नौकरी के लिए गलत कार्य का उपयोग करते हैं तो आप हमेशा समस्याओं में भाग लेंगे। – hakre

+8

यह एक विषय-वस्तु और उपयोगी प्रश्न है। ओपी ने अपनी विशिष्ट स्थिति के बारे में नहीं पूछा और फिर अपनी स्थिति में पसंदीदा कार्य निर्धारित करने के लिए विवरण प्रदान करने में असफल रहा; बल्कि, उन्होंने दो PHP कार्यों के बीच अंतर पर जानकारी मांगी जो एक ही कार्य करने के लिए दिखाई देते हैं।जो, ज़ाहिर है, सवाल पूछता है: वे दोनों क्यों मौजूद हैं, और किस स्थिति में किसी को दूसरे पर प्राथमिकता दी जाएगी? यह दायरे में विशिष्ट है, और प्रयोज्यता में व्यापक (PHP में चरित्र रूपांतरण करने वाला कोई भी इसे जानना चाहेगा)। प्रश्न "रचनात्मक नहीं" के रूप में बंद नहीं किया जाना चाहिए था। – Josh

उत्तर

25

iconv() प्रणाली सी पुस्तकालय जहां पीएचपी चल रहा है (जब तक कि पीएचपी जीएनयू iconv, जिस स्थिति में जीएनयू iconv प्रयोग किया जाता है के साथ बनाया गया है) में पाया iconv() समारोह चारों ओर सिर्फ एक आवरण है। तो iconv() का प्रदर्शन और विशेषताएं इस बात पर निर्भर करती हैं कि आप PHP कहां चल रहे हैं और यह कैसे बनाया गया है।

दूसरी ओर, mb_convert_encoding() के कार्यान्वयन को PHP (मॉड्यूल) स्रोत में शामिल किया गया है। इसमें libmbfl नामक एक लाइब्रेरी शामिल है जो वास्तविक रूपांतरण को संभालती है। इस प्रकार यह वही काम करता है चाहे आप PHP चला रहे हों। http://php.net/manual/en/mbstring.encodings.php

तो, सारांश में, मैं आप कह सकते हैं कि mb_convert_encoding() आप विभिन्न प्लेटफार्मों का समर्थन करना चाहते हैं उपयोग करने के लिए और अधिक विश्वसनीय है लगता है: वहाँ समर्थित एनकोडिंग यहाँ की एक सूची है। हालांकि, यदि आप लिनक्स पर iconv() का उपयोग करते हैं (उदाहरण के लिए), तो यह बहुत अधिक एन्कोडिंग का समर्थन करता है (iconv --list देखें)।

कार्यों का सापेक्ष प्रदर्शन विशिष्ट iconv() कार्यान्वयन पर भी निर्भर करता है।

+2

[iconv] (http://php.net/manual/en/function.iconv.php) में गैर-परिवर्तनीय पात्रों से निपटने के लिए '// TRANSLIT' और' // IGNORE' विकल्प हैं .. [iconv] पढ़ें (http://php.net/manual/en/function.iconv.php) '// IGNORE' समस्याओं के लिए टिप्पणियां जो आपके कोड को E_NOTICE त्रुटियों को फेंक देगा। [mb_convert_encoding] (http://php.net/manual/en/function.mb-convert-encoding.php) केवल 'ini_set (' mbstring.substitute_character ',' none ') के साथ अमान्य वर्णों को हटा सकता है;' (देखें [ mbstring.substitute_character] (http://php.net/manual/ru/mbstring.configuration.php)) –

+0

@Sanya_Zol सच है, लेकिन ऐसा इसलिए है क्योंकि आप glibc के iconv() कार्यान्वयन का उपयोग कर रहे हैं। सिद्धांत रूप में यह अन्य प्लेटफार्मों पर अलग-अलग काम कर सकता है क्योंकि [POSIX परिभाषित नहीं करता कि कौन से कोडसेट उपलब्ध हैं] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/iconv_open.html)। इस बग पर विंडोज – pelle

+1

'iconv -l' सहायक होगा – Pacerier

3

चूंकि PHP 5.4 में एक बग है। कभी-कभी iconv 'समान' char के साथ एक स्ट्रिंग लौटने की बजाय शून्य स्ट्रिंग देता है।

तो आपको mb_convert_encoding का उपयोग करना चाहिए।

+1

लिंक के लिए – Tebe

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

  • कोई संबंधित समस्या नहीं^_^