2013-01-21 175 views
5

由於某些原因,在phpunit中運行mb_convert_encoding時,我得到了意想不到的結果。例如執行以下操作:mb_convert_encoding()不能與phpunit配合使用

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

以上的回報bool (true)下PHP-FPM,和PHP-CLI,然而在PHPUnit的返回false,mb_convert_encoding()正在做什麼,它只是編碼到搞砸字符串。

+2

是否有可能phpunit使用不同的php.ini,其中php_mbstring擴展名未啓用? – jasir

+0

@mins加載了'mbstring'擴展,正如我所說 - mb_convert_encoding確實返回_something_它只是錯誤! –

+1

你的'test.php'是否以UTF-8編碼而沒有BOM? –

回答

1

我的猜測是你正在使用一組不同的mbstring ini設置。這是解決這個問題的一種方法。首先在cli中,您可以運行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')); 
} 

} 

題外話:我不能讓你的代碼工作。我需要告訴它源編碼是ISO-8859-1。即輸入字符集的自動檢測出錯了。如果你只是在尋找一個快速修復,並不在乎爲什麼,明確地添加第三個參數到mb_convert_encoding可能是你所需要的。

0

也許不是答案,但我認爲需要在這裏附上圖片;

我的目標是展示如何使用編碼編輯器將包含unicode的頁面更改爲正確的編碼。我用Notepad ++來做,所以你需要檢查你的編輯器編碼選項。

Notepad++ encoding options

同時,我希望是在計算機科學方面的專家,但我不:)。這只是一個建議,我如何解決我的unicode問題,首先我嘗試「轉換爲UTF-8」,如果不起作用,那麼「轉換爲UTF-8無BOM」,這個選項每次都解決了我的問題問題在過去。但如果你想了解BOM,請點擊這裏:http://en.wikipedia.org/wiki/Byte_order_mark

+0

我的文件肯定是UTF-8,因爲它可以同時使用PHP-CLI和PHP-FPM –

相關問題