2013-06-20 9 views
7

मैं निम्नलिखित पता पंक्ति है: प्राहा 5, Staré Město,पीएचपी UTF8 डिकोडिंग अंक

मैं इससे पहले कि मैं यह एक पीडीएफ फाइल को लिख सकते हैं इस स्ट्रिंग पर utf8_decode() फ़ंक्शन का उपयोग करने की जरूरत है (domPDF lib का उपयोग कर)।

हालांकि, उपरोक्त पता पंक्ति के लिए php utf8 डीकोड फ़ंक्शन गलत (या बल्कि, अपूर्ण) दिखाई देता है।

निम्नलिखित कोड:

<?php echo utf8_decode('Praha 5, Staré Město,'); ?> 

इस उत्पादन:

प्राहा 5, Staré एम STO,

किसी भी विचार क्यों डीकोड हो रही है ना?

+0

utf8_decode बस यूटीएफ -8 में एन्कोडेड स्ट्रिंग को परिवर्तित करता है, क्या आपकी स्ट्रिंग utf8_encoded है? –

उत्तर

14

utf8_decode धर्मान्तरित ISO-8859-1 करने के लिए एक UTF-8 एन्कोडिंग, उर्फ ​​"लैटिन -1" से स्ट्रिंग।
लैटिन -1 एन्कोडिंग पत्र "ě" का प्रतिनिधित्व नहीं कर सकता है। यह इत्ना आसान है।
"डीकोड" कुल गलत नामक है, यह iconv('UTF-8', 'ISO-8859-1', $string) जैसा ही है।

What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text देखें।

+0

धन्यवाद सबसे अच्छा जवाब (2015) +1 – delive

+1

@deceze 'utf8_decode स्ट्रिंग को यूटीएफ -8 एन्कोडिंग से आईएसओ -8859-1' में परिवर्तित करता है, यह मुझे शायद कुछ घंटों बचाता है!यदि आप हमारे कार्यालय में थे तो खुशी से आपको एक पेय खरीदेंगे :) – whizzkid

+0

@whizzkid अगली बार जब आप जर्मनी में हों तो मुझे मारो ...; ओ) – deceze

0

आपको लगता है कि (@Rajeev: इस स्ट्रिंग स्वचालित रूप से UTF-8 एन्कोडेड का पता चला है:

echo mb_detect_encoding('Praha 5, Staré Město,'); 

हमेशा UTF-8 वापस आ जाएगी।) की आवश्यकता नहीं है।

आप बल्कि देखना चाहते हैं: https://code.google.com/p/dompdf/wiki/CPDFUnicode

+0

मैंने utf8_decode को हटा दिया और <मेटा http-equiv = "सामग्री-प्रकार" सामग्री = "टेक्स्ट/एचटीएमएल; charset = utf-8" /> सेट करें और DOMPDF_UNICODE_ENABLED भी सत्य पर सेट है config। हालांकि, यह काम नहीं करता है, ě के रूप में प्रकट होता है? – Latheesan

+0

मैं 'हेल्वैटिका' फ़ॉन्ट का उपयोग कर रहा हूं, क्या ऐसा हो सकता है? – Latheesan

+0

आपको एक और फ़ॉन्ट इंस्टॉल करना पड़ सकता है। यहां उत्तरों की जांच करें: http://stackoverflow.com/questions/990181/dompdf-problem-with-cyrillic-characters – scraaappy

0

मैं एक देसी UTF-8/UTF-16 डिकोडिंग समारोह का उपयोग कर बंद कर (& #number में कन्वर्ट; अभ्यावेदन), मैं किसी भी पैटर्न नहीं मिला है यूटीएफ -8 का पता लगाने के लिए क्यों नहीं, मुझे संदेह है क्योंकि "एन्कोडेड-ए" अनुक्रम हमेशा स्ट्रिंग में उसी स्थिति में बिल्कुल नहीं होता है। आप उस पर कुछ अतिरिक्त जांच कर सकते हैं।

तीन-वर्ण यूटीएफ -8 सूचक: $ startutf8 = chr (0xEF) .chr (187) .chr (1 9 1); (यदि आप इसे कहीं भी देखते हैं, न केवल पहले तीन अक्षर, स्ट्रिंग यूटीएफ -8 एन्कोडेड है)

यूटीएफ -8 नियमों के अनुसार डीकोड; , फिर भी कोई जरूरत नहीं utf8_decode उपयोग करने के लिए, यदि आप इन आंकड़ों 'Praha 5, Staré Město,' से प्राप्त का उपयोग कर

function charset_decode_utf_8 ($string) { 
/* Only do the slow convert if there are 8-bit characters */ 
/* avoid using 0xA0 (\240) in ereg ranges. RH73 does not like that */ 
if (! ereg("[\200-\237]", $string) and ! ereg("[\241-\377]", $string)) 
    return $string; 

// decode three byte unicode characters 
$string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e",  
"'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'", 
$string); 

// decode two byte unicode characters 
$string = preg_replace("/([\300-\337])([\200-\277])/e", 
"'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'", 
$string); 

return $string; 
} 
0

समस्या है अपने PHP फ़ाइल एन्कोडिंग में, UTF-8 एन्कोडिंग में सहेजना: इस पूर्व संस्करण जो बाइट द्वारा बाइट के माध्यम से chugged प्रतिस्थापित डेटाबेस, बेहतर इसे UTF-8

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