Как протестировать массив php с другой кодировкой? - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь утвердить функцию, в которой mycode преобразует Windows-1252 код в UTF-8 Пример следующим образом:

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

Я пытаюсь ввести Windows-1252 и подтвердить его изменения, но егоне работает.

Мой Unititest:

$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 = "пример боли", если вы ...™ re "; и ожидаем, что функция отправит его в UTF-8 и вернет " пример боли - если вы " как я могу это сделать?

Я получаюследующая ошибка:

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

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Рад, что помогу!Ответ для справки:

Похоже, что вы изменили параметры функции 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");

Смотрите ожидаемый рабочий код в действии здесь .

0 голосов
/ 29 мая 2018

Если вы хотите гарантировать кодировку для ваших тестовых строк, сделайте следующее:

  1. Убедитесь, что вы знаете, в какой кодировке вы пишете код, например: UTF8.
    • Это будет в настройках вашего редактора.
  2. Преобразуйте вашу тестовую строку из этой кодировки в вашу цель.
    • $test_1252 = mb_convert_encoding($test_utf8, 'cp-1252', 'utf-8');
  3. Кодирование тестовой строки во что-то 7-битное безопасное, например base64.
    • echo base64_encode($test_1252);

Теперь у вас есть строка, которую можно безопасно копировать / вставлять / вставлять из любого файла, который вы хотите, сохраняя его кодировку.

Например:

$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="
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...