2011-03-08 13 views
9

जब मेरी PHP स्क्रिप्ट UTF-8 एन्कोडिंग के साथ चलती है, गैर-असीसी वर्णों का उपयोग करके, कुछ PHP फ़ंक्शन strtolower() काम नहीं करते हैं। मैं mb_strtolower का उपयोग कर सकता हूं, लेकिन यह स्क्रिप्ट विभिन्न प्लेटफॉर्म और कॉन्फ़िगरेशन के सभी प्रकारों पर चल सकती है, और मल्टीबाइट स्ट्रिंग एक्सटेंशन उपलब्ध नहीं हो सकता है। मैं जांच सकता हूं कि फ़ंक्शन उपयोग से पहले मौजूद है या नहीं, लेकिन मेरे पास पूरे कोड में स्ट्रिंग फ़ंक्शन हैं और प्रत्येक इंस्टेंस को प्रतिस्थापित नहीं करेंगे।set_locale (LC_CTYPE, 'C') क्या करता है; वास्तव में करते हैं?

किसी ने set_locale(LC_CTYPE, 'C') का उपयोग करने का सुझाव दिया, जो कि वह कहता है कि स्ट्रिंग फ़ंक्शंस सही ढंग से काम करने का कारण बनता है। यह ठीक लगता है, लेकिन मैं यह समझने के बिना उस परिवर्तन को शुरू नहीं करना चाहता हूं कि यह वास्तव में क्या कर रहा है। मैंने पहले संख्याओं के स्वरूपण को बदलने के लिए set_locale का उपयोग किया है, लेकिन मैंने पहले LC_CTYPE ध्वज का उपयोग नहीं किया है, और मैं वास्तव में यह नहीं समझता कि यह क्या करता है। मूल्य 'C' का क्या अर्थ है? धन्यवाद!

+3

संदर्भ: http://php.net/manual/en/function.setlocale.php (यह समझाता नहीं है कि 'सी' क्या करता है, आरटीएफएम के रूप में नहीं, केवल पूर्णता के लिए) –

उत्तर

8

C का अर्थ है "जो भी लोकेल हार्डकोड किया गया है उसका उपयोग करें" (और चूंकि अधिकांश * एनआईक्स प्रोग्राम सी में लिखे जाते हैं, इसे C कहा जाता है)। हालांकि, यह आमतौर पर एक यूटीएफ 8 लोकेल नहीं है।

आप इस तरह के UTF8 आप नियमित स्ट्रिंग कार्यों का उपयोग नहीं कर सकते हैं के रूप में multibyte वर्णसेट उपयोग कर रहे हैं - mb_ समकक्षों का उपयोग कर की आवश्यकता है। हालांकि, लगभग हर PHP स्थापना में यह एक्सटेंशन सक्षम होना चाहिए।

+0

धन्यवाद स्पष्टीकरण - यदि मैं उपयोगकर्ता द्वारा कॉन्फ़िगर करने योग्य मान करता हूं, तो क्या वह काम करेगा? उदाहरण के लिए। उपयोगकर्ता कॉन्फ़िगरेशन फ़ाइल में अपना वास्तविक लोकेल दर्ज कर सकता है, और फिर मैं set_locale (LC_TYPE, $ config_value) को कॉल करता हूं; - क्या यह mb_ कार्यों का उपयोग करने की आवश्यकता को अस्वीकार करेगा? या फिर भी मुझे उनका उपयोग करना होगा? – Russ

+0

आप वैश्विक स्तर पर mb_ * फ़ंक्शंस को सक्रिय कर सकते हैं! – powtac

+0

@powtac अगर वह साझा होस्टिंग पर नहीं है जो इसका समर्थन नहीं करता है। –

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