2012-08-22 13 views
5

मुझे PHP फ़ंक्शन mb_detect_encoding के साथ कुछ समस्याएं हैं। मैं इसे आईएसओ -885 9 -1 में परिवर्तित नहीं कर सकता। कोई मदद?mb_convert_encoding समस्याएं

कोड:

$str = "åäö"; 
$encoding = mb_detect_encoding($str); 
echo $encoding; 

$encoding = mb_detect_encoding(mb_convert_encoding($str, "ISO-8859-1")); 
echo $encoding; 

आउटपुट:

UTF-8

UTF-8

अपडेट किया गया, समाधान:

मैंने mb_detect_order को सरणी ('यूटीएफ -8', 'आईएसओ -885 9 -1') में अपडेट किया और यह काम किया।

+0

आपका 'mb_detect_order() 'क्या है? – Passerby

+0

वैसे आप वहां जाते हैं। मैंने mb_detect_order को शुरुआत में यूटीएफ -8 में अपडेट किया और यह काम किया। धन्यवाद! – brasimon

+0

यदि आपने अपनी समस्या हल कर ली है, तो कृपया इसे उत्तर के रूप में पोस्ट करें और जब आप कर सकें इसे स्वीकार करें। –

उत्तर

-2

मैं सरणी mb_detect_order अद्यतन ('UTF-8', 'ISO-8859-1') और यह

+0

रूपांतरण पर विश्वास करने के लिए आप खुद को धोखा दे रहे हैं। चूंकि c3a5c3a4c3b6 यूटीएफ -8 और आईएसओ -885 9 -1 (दोनों मामलों में अलग-अलग चीजों का प्रतिनिधित्व करने) में एक वैध बाइट स्ट्रिंग है, इसलिए आप इसे एन्कोडिंग के रूप में रिपोर्ट करने के लिए mb_detect_order प्राप्त कर सकते हैं। – borrible

+0

@borrible क्या होगा यदि उसका 'mb_internal_encoding' पहले ही यूटीएफ -8 पर सेट हो चुका है? – Passerby

+0

@Passerby - यह हम जो देख रहे हैं उसके अनुरूप नहीं है। यदि स्ट्रिंग को वास्तव में आईएसओ -885 9 -1 में परिवर्तित कर दिया गया था तो यह बाइट-अनुक्रम e5e4f6 बन गया होगा। अब यह वैध यूटीएफ -8 मान्य नहीं है, इसलिए mb_convert_encoding ने यूटीएफ -8 की सूचना नहीं दी होगी। हालांकि, अगर अनुक्रम सी 3 ए 5 सी 3 ए 4 सी 3 बी 6 (वैध यूटीएफ -8 या आईएसओ -885 9 -1) के रूप में छोड़ा गया था तो हमें स्थिति बताई जाएगी। – borrible

6

काम आप वास्तव में अपने स्ट्रिंग परिवर्तित नहीं किया गया है। इसके बजाय, mb_convert_encoding पर कॉल यह नहीं मानता कि मूल स्ट्रिंग यूटीएफ -8 में थी। कॉल से पहले स्ट्रिंग एक बाइट अनुक्रम था जो पहले ही आईएसओ -885 9 -1 हो सकता था (और वस्तुओं को अलग-अलग दर्शाता था)। आप mb_detect_encoding को स्ट्रिंग पर bin2hex का उपयोग करके और रूपांतरण कॉल के बाद बाइट-अनुक्रम देखकर, यह मामला देख सकते हैं। आप देखेंगे कि बाइट अनुक्रम अपरिवर्तित था।

काम में रूपांतरण प्राप्त करने के लिए, आपको इसे मूल एन्कोडिंग (इस मामले में) बताना होगा। का उपयोग करें:

mb_convert_encoding($str, 'ISO-8859-1','utf-8'); 

आप बाइट-अनुक्रम के बाद यह आप देखेंगे रूपांतरण हुआ है की जांच-पड़ताल।

+0

क्या आईएसओ -885 9 -1 नो-एन्कोडिंग "स्ट्रिंग" के लिए काम करता है (यानी यादृच्छिक अमान्य बाइट अनुक्रम)? – Pacerier

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