如何使用不同的字符集单元测试php数组?

时间:2018-05-29 14:21:44

标签: php arrays character-encoding phpunit

我试图断言一个函数,其中mycode将Windows-1252代码转换为UTF-8示例如下:

function test($article){
       $result = mb_convert_encoding($article[0]['Description'], "UTF-8", "Windows-1252");
retrun $result;
}

我正在尝试输入Windows-1252并声明其更改,但它无效。

我的第一名:

$convertedArray = array(array('Description' => "an example pain— if you’re"));
$someString = $this->getMockBuilder('\Client')
            ->setMethods(['getArticle'])
            ->getMock();
        $someString->expects($this->once())
            ->method('getArticle')
            ->with('12345')
            ->will($this->returnValue($convertedArray));

        \client::set($someString);

或者

简单地说:我试图输入 $ str =“示例痛苦”,如果你是“并期望函数将其转换为UTF-8并返回”一个例子的痛苦 - 如果你“我该怎么做?

我收到以下错误:

--- Expected
+++ Actual
@@ @@
 Array (
-    'record' => 'an example pain— if you’re'
+    'record' => 'an example pain� if you’re'
 )

2 个答案:

答案 0 :(得分:3)

如果要保证测试字符串的编码,请执行以下操作:

  1. 确保您知道编写代码的编码,例如:UTF8。
    • 这将在您的编辑器设置中。
  2. 将测试字符串从该编码转换为目标。
    • $test_1252 = mb_convert_encoding($test_utf8, 'cp-1252', 'utf-8');
  3. 将测试字符串编码为7位安全的内容,如base64。
    • echo base64_encode($test_1252);
  4. 现在你有了一个字符串,你可以安全地复制/粘贴你想要的任何文件,同时保持其编码。

    例如:

    $test_utf8 = "an example pain— if you’re";
    $test_1252 = mb_convert_encoding($test_utf8, 'cp1252', 'utf-8');
    
    var_dump(
        $test_utf8,
        $test_1252,
        bin2hex($test_utf8),
        bin2hex($test_1252),
        base64_encode($test_utf8),
        base64_encode($test_1252)
    );
    

    输出:

    string(30) "an example pain— if you’re"
    string(26) "an example pain� if you�re"
    string(60) "616e206578616d706c65207061696ee2809420696620796f75e280997265"
    string(52) "616e206578616d706c65207061696e9720696620796f75927265"
    string(40) "YW4gZXhhbXBsZSBwYWlu4oCUIGlmIHlvdeKAmXJl"
    string(36) "YW4gZXhhbXBsZSBwYWlulyBpZiB5b3WScmU="
    

答案 1 :(得分:1)

很高兴我能帮忙!答案供参考:

不幸的是,您似乎更改了mb_convert_encoding()函数的参数。

// Change this
$result = mb_convert_encoding($article[0]['Description'], "UTF-8", "Windows-1252");

// To this
$result = mb_convert_encoding($article[0]['Description'], "Windows-1252", "UTF-8");

查看您的预期工作代码[{3}}。