2013-01-21 11 views
5

के साथ काम नहीं कर रहा है किसी कारण से, phpunit में mb_convert_encoding चलाते समय, मुझे अप्रत्याशित परिणाम मिल रहे हैं। उदाहरण के लिए निम्न कार्य:mb_convert_encoding() phpunit

var_dump(mb_convert_encoding(utf8_decode('ö'), 'UTF-8') === 'ö')

ऊपर रिटर्न bool (true) पीएचपी-एफ पी एम, और PHP-CLI के तहत, तथापि के तहत PHPUnit झूठी देता है, mb_convert_encoding() कुछ कर रहा है, यह सिर्फ एक में गड़बड़ स्ट्रिंग के लिए एन्कोड करता है।

+2

क्या यह संभव है कि phpunit विभिन्न php.ini का उपयोग करता है, जहां php_mbstring एक्सटेंशन सक्षम नहीं है? – jasir

+0

@ mins 'mbstring' एक्सटेंशन लोड किया गया है, जैसा कि मैंने कहा - mb_convert_encoding वापस आ रहा है _sethingething_ यह; बस गलत है! –

+1

क्या आपका 'test.php' बीओएम के बिना यूटीएफ -8 में एन्कोड किया गया है? –

उत्तर

1

मेरा अनुमान है कि आप mbstring ini सेटिंग्स का एक अलग सेट उपयोग कर रहे हैं। यहां समस्या निवारण का एक तरीका है। सबसे पहले क्ली में आप उन्हें देखने के लिए php -i |grep -i "mb" चला सकते हैं।

फिर एक phpunit परीक्षण बनाएं जो मानता है कि मान समान हैं। यहाँ मेरा है (मैं केवल संभावना संदिग्धों किया):

class MbStringTest extends PHPUnit_Framework_TestCase{ 

function test1(){ 
$this->assertEquals('UTF-8', ini_get('mbstring.internal_encoding')); 
$this->assertEquals(0, ini_get('mbstring.encoding_translation')); 
$this->assertEquals('', ini_get('mbstring.detect_order')); 
$this->assertEquals(0, ini_get('mbstring.strict_detection')); 

$s='ö'; 
$this->assertEquals($s,mb_convert_encoding(utf8_decode($s), 'UTF-8' , 'ISO-8859-1')); 
} 

} 

एक तरफ: मैं अपने कोड काम करने के लिए नहीं मिल सकता है। मुझे यह बताने की जरूरत थी कि स्रोत एन्कोडिंग आईएसओ -885 9 -1 है। अर्थात। इनपुट चरित्र सेट के ऑटो-डिटेक्शन में यह गलत हो गया। यदि आप केवल एक त्वरित फिक्स की तलाश में हैं और परवाह नहीं करते हैं, तो उस पैरामीटर को mb_convert_encoding पर स्पष्ट रूप से जोड़ने की आवश्यकता हो सकती है।

0

शायद कोई जवाब नहीं है लेकिन मुझे लगता है कि यहां छवि संलग्न करने की आवश्यकता है;

मेरा लक्ष्य यह है कि कोडिंग संपादक के साथ अपने यूनिकोड युक्त पृष्ठों को उचित एन्कोडिंग में कैसे बदला जाए। मैं इसे नोटपैड ++ के साथ करता हूं, लेकिन आपको अपने एडिटर एन्कोडिंग विकल्पों की जांच करनी होगी।

Notepad++ encoding options

इस बीच, मैं कंप्यूटर विज्ञान पर एक विशेषज्ञ होना चाहते हैं, लेकिन मैं नहीं कर रहा हूँ :)। यह एकमात्र सुझाव था कि मैं अपनी तरफ से यूनिकोड समस्याओं को कैसे हल करता हूं, सबसे पहले मैं "यूटीएफ -8 में कनवर्ट करें" का प्रयास करता हूं, अगर काम नहीं करता है, तो "बीओएम के बिना यूटीएफ -8 में कनवर्ट करें" और इस विकल्प ने हर बार मेरा हल किया था अतीत में समस्या लेकिन यदि आप बीओएम के बारे में सोचते हैं, तो यहां देखें: http://en.wikipedia.org/wiki/Byte_order_mark

+0

मेरी फ़ाइलें निश्चित रूप से यूटीएफ -8 हैं क्योंकि यह PHP-CLI और PHP-FPM दोनों पर काम कर रही है –