2013-01-21 152 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 –

相关问题