出于某种原因,mb_convert_encoding
在 phpunit 中运行时,我得到了意想不到的结果。例如执行以下操作:
var_dump( mb_convert_encoding( utf8_decode( 'ö' ), 'UTF-8' ) === 'ö' )
上面bool (true)
在 PHP-FPM 和 PHP-CLI 下返回,但是在 PHPunit 下返回 false,mb_convert_encoding()
正在做某事,它只是编码为一个混乱的字符串。
我的猜测是您使用的是一组不同的 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
可能就是您所需要的。
也许不是答案,但我认为需要在此处附上图片;
我的目标是展示如何使用编码编辑器将包含 unicode 的页面更改为正确的编码。我是用 Notepad++ 做的,但是你需要检查你的编辑器编码选项。
同时,我希望成为计算机科学专家,但我不是:)。这是一个公正的建议,我如何解决我这边的 unicode 问题,首先我尝试“转换为 UTF-8”,如果不起作用,然后“转换为 UTF-8 没有 BOM”,这个选项每次都解决了我的问题过去的问题。但如果您想了解 BOM,请查看此处:http ://en.wikipedia.org/wiki/Byte_order_mark