【问题标题】:mb_convert_encoding() not working with phpunitmb_convert_encoding() 不适用于 phpunit
【发布时间】:2013-01-04 17:10:39
【问题描述】:

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

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

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

【问题讨论】:

  • phpunit是否有可能使用不同的php.ini,其中php_mbstring扩展没有启用?
  • @mins mbstring 扩展已加载,正如我所说 - mb_convert_encoding 确实返回 something 它;只是错了!
  • 您的test.php 是否以没有BOM 的UTF-8 编码?
  • @qeremy 如何在 UTf-8 中编码我的测试以及 BOM 是什么? :)

标签: php phpunit mbstring


【解决方案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。 IE。输入字符集的自动检测出错了。如果您只是在寻找快速解决方案而不关心为什么,那么将第三个参数显式添加到 mb_convert_encoding 可能就足够了。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我的文件绝对是 UTF-8,因为它适用于 PHP-CLI 和 PHP-FPM
    猜你喜欢
    • 2015-06-12
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2014-06-09
    • 1970-01-01
    • 2013-06-29
    相关资源
    最近更新 更多