mb_convert_encoding()不使用phpunit

时间:2013-01-21 15:42:34

标签: php phpunit mbstring

出于某种原因,在phpunit中运行mb_convert_encoding时,我得到了意想不到的结果。例如,执行以下操作:

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

以上在PHP-FPM和PHP-CLI下返回bool (true),但是在PHPunit下返回false,mb_convert_encoding()正在执行某些操作,它只是编码为混乱的字符串。

2 个答案:

答案 0 :(得分: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。即输入字符集的自动检测错误。如果您只是在寻找快速修复并且不关心原因,那么将第3个参数明确添加到mb_convert_encoding可能就是您所需要的。

答案 1 :(得分:0)

也许不是答案,但我认为需要在这里附上图片;

我的目标是展示如何使用编码编辑器将包含unicode的页面更改为正确的编码。我用Notepad ++这样做,但你需要检查你的编辑器编码选项。

Notepad++ encoding options

与此同时,我希望成为计算机科学专家,但我不是:)。这只是一个建议,我如何解决我身边的unicode问题,首先我尝试“转换为UTF-8”,如果不起作用,然后“转换为UTF-8没有BOM”这个选项每次都解决了我的问题过去的问题。但如果您想知道BOM,请点击此处:http://en.wikipedia.org/wiki/Byte_order_mark