5

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

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

上面bool (true)在 PHP-FPM 和 PHP-CLI 下返回,但是在 PHPunit 下返回 false,mb_convert_encoding()正在做某事,它只是编码为一个混乱的字符串。

4

2 回答 2

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可能就是您所需要的。

于 2013-01-22T09:53:41.717 回答
0

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

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

Notepad++ 编码选项

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

于 2013-01-21T17:05:24.693 回答