2011-10-28 19 views
5

मैं वर्तमान में यदि संभव हो तो उन्हें अपने समकक्ष ASCII चरित्र में बदलकर एक यूटीएफ -8 स्ट्रिंग से सभी विशेष पात्रों और उच्चारणों को हटाने की कोशिश कर रहा हूं।PHP के आइकनव को सेटलोकेल की आवश्यकता क्यों है?

तो मैं बस इस कोड का उपयोग कर रहा:

$result = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $input); 

समस्या यह है कि उदाहरण के लिए शब्द "शुरुआत" "पहली फिल्म" के बदले "dbut" में बदल जाता है है। यह काम करने के लिए, मैं setlocale के लिए एक कॉल को जोड़ने के लिए, इस तरह की जरूरत है:

setlocale(LC_ALL, 'en_US.UTF8'); 
$result = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $input); 

और मैं क्यों समझ में नहीं आता। मैंने सोचा कि यूटीएफ -8 और एएससीआईआई हमेशा समान थे, जो भी लोकेल आप उपयोग करते हैं।

संपादित करें: मैं यह मतलब नहीं था UTF-8 ASCII के बराबर होती है, मैं मतलब UTF-8 हमेशा UTF-8 के बराबर होती है और ASCII हमेशा ASCII के बराबर होती है

+0

एएससीआईआई और यूटीएफ -8 एक जैसा है। यूटीएफ -8 परिमाण के आदेश से बड़ा है। – NikiC

उत्तर

1

UTF-8 के सबसेट कि ASCII के साथ ओवरलैप हो (जो कोड है अंक 0-127) वास्तव में ASCII के समान है। हालांकि, उच्चारण लैटिन वर्ण ASCII चरित्र सेट का हिस्सा नहीं हैं और यदि आप setlocale स्वयं नहीं हैं, तो सिस्टम का डिफ़ॉल्ट लोकेल (जो स्पष्ट रूप से इन उच्चारण वर्णों में शामिल नहीं है) का उपयोग करने के लिए एक चरित्र सेट प्राप्त करने के लिए किया जाता है।

सामान्य रूप से, iconv थोड़ा iffy हो सकता है; इस विस्तार के introduction में बताया गया है:

इस मॉड्यूल iconv लिए वर्ण सेट रूपांतरण सुविधा एक अंतरफलक में शामिल है। इस मॉड्यूल के साथ, आप किसी अन्य वर्ण सेट, द्वारा प्रतिनिधित्व किए गए एक में स्थानीय वर्ण सेट द्वारा प्रतिनिधित्व की गई स्ट्रिंग को चालू कर सकते हैं जो यूनिकोड वर्ण सेट हो सकता है। समर्थित चरित्र सेट आपके सिस्टम के आइकनव कार्यान्वयन पर निर्भर करता है। ध्यान दें कि कुछ सिस्टम पर iconv फ़ंक्शन काम नहीं कर सकता है जैसा आप उम्मीद करते हैं। ऐसे मामले में, जीएनयू libiconv पुस्तकालय स्थापित करना एक अच्छा विचार होगा। यह अधिक संभावना परिणाम के साथ समाप्त हो जाएगा।

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