[Решено] json_encode(): Invalid UTF-8 sequence in argument

Всё про тестирование в Yii 2.0
Ответить
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

[Решено] json_encode(): Invalid UTF-8 sequence in argument

Сообщение Dominus »

Доброе время суток.

Поставил приложение advanced запускаю тесты из коробки, unit проходят, functional сыпятся ошибки:
[yii\base\ErrorException] json_encode(): Invalid UTF-8 sequence in argument

Windows XP SP3, OpenServer 5.2.2, Версия PHP 5.4

Код: Выделить всё

> vendor\bin\codecept run
Codeception PHP Testing Framework v2.3.4
Powered by PHPUnit 4.8.36 by Sebastian Bergmann and contributors.

Код: Выделить всё

Common\tests.unit Tests (3) -------------------------------------------------------------------

+ LoginFormTest: Login no user (0.25s)
+ LoginFormTest: Login wrong password (1.09s)
+ LoginFormTest: Login correct (1.23s)
-----------------------------------------------------------------------------------------------

Frontend\tests.functional Tests (12) ----------------------------------------------------------

+ AboutCest: Check about (0.39s)
+ ContactCest: Check contact (1.42s)
E ContactCest: Check contact submit no data (0.56s)
E ContactCest: Check contact submit not correct email (0.39s)
E ContactCest: Check contact submit correct data (0.42s)
E HomeCest: Check open (0.22s)
E LoginCest: Check empty (0.67s)
E LoginCest: Check wrong password (0.67s)
E LoginCest: Check valid login (1.39s)
E SignupCest: Signup with empty fields (0.66s)
E SignupCest: Signup with wrong email (0.66s)
E SignupCest: Signup successfully (1.38s)
-----------------------------------------------------------------------------------------------

Frontend\tests.unit Tests (8) -----------------------------------------------------------------

+ ContactFormTest: Send email (0.09s)
+ PasswordResetRequestFormTest: Send message with wrong email address (0.20s)
+ PasswordResetRequestFormTest: Not send emails to inactive user (0.20s)
+ PasswordResetRequestFormTest: Send email successfully (0.36s)
+ ResetPasswordFormTest: Reset wrong token (0.17s)
+ ResetPasswordFormTest: Reset correct token (1.75s)
+ SignupFormTest: Correct signup (1.70s)
+ SignupFormTest: Not correct signup (0.23s)

Код: Выделить всё

Time: 34.15 seconds, Memory: 37.75MB

There were 11 errors:

---------
1) ContactCest: Check contact submit no data
 Test  ..\frontend\tests\functional\ContactCest.php:checkContactSubmitNoData

  [yii\base\ErrorException] json_encode(): Invalid UTF-8 sequence in argument


Scenario Steps:

 2. $I->submitForm("#contact-form",[]) at ..\frontend\tests\functional\ContactCest.php:22
 1. $I->amOnPage(["site\/contact"]) at ..\frontend\tests\functional\ContactCest.php:12
Как видно, проблема с кодировкой:
$I->submitForm('#contact-form', []);

В других проектах, которые раньше проходили функциональные тесты, такая же ситуация: [yii\base\ErrorException] json_encode(): Invalid UTF-8 sequence in argument.

В чем может быть причина?

P.S.
Сайт работает корректно и отдаёт данные как надо, везде кодировка UTF-8.
Ошибка появляется только в тестах, причем в функциональных, юнит тесты проходятся на ура.
Последний раз редактировалось Dominus 2017.08.08, 04:19, всего редактировалось 3 раза.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: json_encode(): Invalid UTF-8 sequence in argument

Сообщение zelenin »

Dominus писал(а): 2017.08.06, 14:29 В других проектах, которые раньше проходили функциональные тесты, такая же ситуация: [yii\base\ErrorException] json_encode(): Invalid UTF-8 sequence in argument.

В чем может быть причина?
json_encode(): Invalid UTF-8 sequence in argument.
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: json_encode(): Invalid UTF-8 sequence in argument

Сообщение Dominus »

Спасибо за копи паст моего поста, но хотелось бы увидеть ответ по объективнее.

Почему возникла эта ошибка, когда раньше её не было, и в проектах ничего не менялось, кроме обновлений composer update.
Причем как написал в первом посте, что поставил ради эксперимента advanced, и из коробки получаем то что получаем.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: json_encode(): Invalid UTF-8 sequence in argument

Сообщение zelenin »

Dominus писал(а): 2017.08.06, 14:43 Спасибо за копи паст моего поста, но хотелось бы увидеть ответ по объективнее.

Почему возникла эта ошибка, когда раньше её не было
ошибки всегда возникают, когда раньше их не было. Причину можно увидеть с помощью дебага. Где дебажить - в ошибке указано. Вот вам "по объективнее".
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: json_encode(): Invalid UTF-8 sequence in argument

Сообщение Dominus »

А вы мастер сарказма. Всё это понятно и без вашего ответа.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: json_encode(): Invalid UTF-8 sequence in argument

Сообщение zelenin »

Dominus писал(а): 2017.08.06, 14:52 А вы мастер сарказма. Всё это понятно и без вашего ответа.
так к чему тогда вообще вопрос? ответ на вопрос "почему в json_encode приходит неправильный utf-8" в ваших руках. Никто на форуме не имеет доступа к вашему коду.
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: json_encode(): Invalid UTF-8 sequence in argument

Сообщение Dominus »

Если прочитать внимательнее первый пост то там написано что из коробки, моего кода там по сути нет.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: json_encode(): Invalid UTF-8 sequence in argument

Сообщение zelenin »

Dominus писал(а): 2017.08.06, 14:58 Если прочитать внимательнее первый пост то там написано что из коробки, моего кода там по сути нет.
написанного тобой может и нет, а код весь - твой, а не мой. Дебажь.
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: json_encode(): Invalid UTF-8 sequence in argument

Сообщение Dominus »

Лучше вообще не отвечать, чем показывать виртуозность в сарказме.
Дебажу, ищу, смысл темы в том, что бы узнать, у меня у одного такая проблема или кто то еще сталкивался с этим, массовая ошибка или нет, для того что бы понять с чем это связанно.
В Google толком ничего не нашел, поэтому написал пост тут.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: json_encode(): Invalid UTF-8 sequence in argument

Сообщение zelenin »

Dominus писал(а): 2017.08.06, 15:16 Лучше вообще не отвечать, чем показывать виртуозность в сарказме.
лучше не задавать вопросы, если не умеешь читать ответы.
Dominus писал(а): 2017.08.06, 15:16Дебажу, ищу
не ищи - просто продебажь и все. Это у тебя займет 3 минуты.
Dominus писал(а): 2017.08.06, 15:16смысл темы в том, что бы узнать, у меня у одного такая проблема или кто то еще сталкивался с этим
конечно нет. периодически вижу такие темы.
Dominus писал(а): 2017.08.06, 15:16массовая ошибка или нет, для того что бы понять с чем это связанно.
В Google толком ничего не нашел, поэтому написал пост тут.
программист, у тебя четкая ошибка - неправильная utf-8 последовательность в json_encode. Что ты все ищешь в гугл? продебажь что там у тебя приходит в json_encode и откуда. Это уже смешно.
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: json_encode(): Invalid UTF-8 sequence in argument

Сообщение Dominus »

Вам смешно с вашего первого поста, это я уже заметил.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: json_encode(): Invalid UTF-8 sequence in argument

Сообщение Dominus »

Если в конфиге отключить csrf то тесты все проходятся и никаких ошибок нет.

Код: Выделить всё

...
'components' => [
   'request' => [
      'csrfParam' => '_csrf-frontend',
      'enableCsrfValidation'=>false,
   ],
...
]

Код: Выделить всё

> codecept run
Codeception PHP Testing Framework v2.3.4
Powered by PHPUnit 4.8.36 by Sebastian Bergmann and contributors.

Frontend\tests.functional Tests (12) ----------------------------------------------------------

+ AboutCest: Check about (0.30s)
+ ContactCest: Check contact (1.44s)
+ ContactCest: Check contact submit no data (0.64s)
+ ContactCest: Check contact submit not correct email (0.72s)
+ ContactCest: Check contact submit correct data (1.06s)
+ HomeCest: Check open (0.31s)
+ LoginCest: Check empty (0.81s)
+ LoginCest: Check wrong password (0.64s)
+ LoginCest: Check valid login (1.53s)
+ SignupCest: Signup with empty fields (0.80s)
+ SignupCest: Signup with wrong email (0.81s)
+ SignupCest: Signup successfully (1.61s)
-----------------------------------------------------------------------------------------------


Frontend\tests.unit Tests (8) -----------------------------------------------------------------

+ ContactFormTest: Send email (0.09s)
+ PasswordResetRequestFormTest: Send message with wrong email address (0.20s)
+ PasswordResetRequestFormTest: Not send emails to inactive user (0.20s)
+ PasswordResetRequestFormTest: Send email successfully (0.31s)
+ ResetPasswordFormTest: Reset wrong token (0.17s)
+ ResetPasswordFormTest: Reset correct token (2.09s)
+ SignupFormTest: Correct signup (7.22s)
+ SignupFormTest: Not correct signup (2.22s)
-----------------------------------------------------------------------------------------------



Time: 35.98 seconds, Memory: 36.50MB

OK (20 tests, 52 assertions)
Запускаем со включенным csrf:

Код: Выделить всё

> codecept run --debug
Codeception PHP Testing Framework v2.3.4
Powered by PHPUnit 4.8.36 by Sebastian Bergmann and contributors.

Frontend\tests.functional Tests (12) -------------------------------------------------------------------------------------

Modules: Filesystem, Yii2
--------------------------------------------------------------------------------------------------------------------------

ContactCest: Check contact submit no data
Signature: frontend\tests\functional\ContactCest:checkContactSubmitNoData
Test: tests\functional\ContactCest.php:checkContactSubmitNoData
Scenario --
 I am on page ["site\/contact"]
  [Request Headers] []
  [yii\web\Session::open] 'Session started'
  [Page] /index-test.php?r=site%2Fcontact
  [Response] 200
  [Request Cookies] []
  [Response Headers] {"content-type":["text/html; charset=UTF-8"]}
 I submit form "#contact-form",[]
  [Uri] http://localhost/index-test.php?r=site%2Fcontact
  [Method] POST
  [Parameters] {"_csrf-frontend":"l6uF5N4sMoNOr--cEXR_35j7ksUionRQjSPyIo1K0PqtwFBK7XZgclDbijXPz0Um_DA3pyrWn_GMJ6w2dUe4kA==","ContactForm[name]":"","ContactForm[email]":"","ContactForm[subject]":"","ContactForm[body]":"","ContactForm[verifyCode]":""}
  [Request Headers] []
  [yii\web\Session::init] 'Session is already started'
  [Page] http://localhost/index-test.php?r=site%2Fcontact
  [Response] 200
 ERROR
 
...

---------
1) ContactCest: Check contact submit no data
 Test  tests\functional\ContactCest.php:checkContactSubmitNoData

  [yii\base\ErrorException] json_encode(): Invalid UTF-8 sequence in argument


Scenario Steps:

 2. $I->submitForm("#contact-form",[]) at tests\functional\ContactCest.php:21
 1. $I->amOnPage(["site\/contact"]) at tests\functional\ContactCest.php:11
 
Отключаем csrf, запускаем:

Код: Выделить всё

ContactCest: Check contact submit no data
Signature: frontend\tests\functional\ContactCest:checkContactSubmitNoData
Test: tests\functional\ContactCest.php:checkContactSubmitNoData
Scenario --
 I am on page ["site\/contact"]
  [Request Headers] []
  [yii\web\Session::open] 'Session started'
  [Page] /index-test.php?r=site%2Fcontact
  [Response] 200
  [Request Cookies] []
  [Response Headers] {"content-type":["text/html; charset=UTF-8"]}
 I submit form "#contact-form",[]
  [Uri] http://localhost/index-test.php?r=site%2Fcontact
  [Method] POST
  [Parameters] {"ContactForm[name]":"","ContactForm[email]":"","ContactForm[subject]":"","ContactForm[body]":"","ContactForm[verifyCode]":""}
  [Request Headers] []
  [yii\web\Session::init] 'Session is already started'
  [Page] http://localhost/index-test.php?r=site%2Fcontact
  [Response] 200
  [Request Cookies] []
  [Response Headers] {"content-type":["text/html; charset=UTF-8"]}
 I see "Contact","h1"
 I see validation error "Name cannot be blank"
   I see "Name cannot be blank",".help-block"
 I see validation error "Email cannot be blank"
   I see "Email cannot be blank",".help-block"
 I see validation error "Subject cannot be blank"
   I see "Subject cannot be blank",".help-block"
 I see validation error "Body cannot be blank"
   I see "Body cannot be blank",".help-block"
 I see validation error "The verification code is incorrect"
   I see "The verification code is incorrect",".help-block"
 PASSED
Тест прошел, я так понимаю что json_encode() ругается на значение параметра _csrf-frontend.
Последний раз редактировалось Dominus 2017.08.08, 01:06, всего редактировалось 1 раз.
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: json_encode(): Invalid UTF-8 sequence in argument

Сообщение samdark »

Попробуйте с master. По идее, с https://github.com/yiisoft/yii2/commit/ ... cd33ade541 должно быть в норме.
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: json_encode(): Invalid UTF-8 sequence in argument

Сообщение Dominus »

samdark писал(а): 2017.08.07, 17:03 Попробуйте с master. По идее, с https://github.com/yiisoft/yii2/commit/ ... cd33ade541 должно быть в норме.
То что доктор прописал))

Код: Выделить всё

> codecept run --debug
Codeception PHP Testing Framework v2.3.4
Powered by PHPUnit 4.8.36 by Sebastian Bergmann and contributors.

Frontend\tests.functional Tests (12) -------------------------------------------------------------------------------------

Modules: Filesystem, Yii2
--------------------------------------------------------------------------------------------------------------------------

ContactCest: Check contact submit no data
Signature: frontend\tests\functional\ContactCest:checkContactSubmitNoData
Test: tests\functional\ContactCest.php:checkContactSubmitNoData
Scenario --
 I am on page ["\/site\/contact"]
  [Request Headers] []
  [yii\web\Session::open] 'Session started'
  [Page] /index-test.php/site/contact
  [Response] 200
  [Request Cookies] []
  [Response Headers] {"content-type":["text/html; charset=UTF-8"]}
 I submit form "#contact-form",[]
  [Uri] http://localhost/index-test.php/site/contact
  [Method] POST
  [Parameters] {"_csrf-frontend":"e-V1SejnyaZABhTzhs5l076Km-d6q_1WwGTdjLT2dyEToywH2I2CkCNsUJDrqxW87_yjtE_njwWvNeW77aEkbw==","ContactForm[name]":"","ContactForm[email]":"","ContactForm[subject]":"","ContactForm[body]":"","ContactForm[verifyCode]":""}
  [Request Headers] []
  [yii\web\Session::init] 'Session is already started'
  [Page] http://localhost/index-test.php/site/contact
  [Response] 200
  [Request Cookies] {"_csrf-frontend":"6950e63a861a0d2983312176ddca7a91c2919d56dd4923f79e190a3b4b0b84b3a:2:{i:0;s:14:"_csrf-frontend";i:1;s:32:"hFYN0jK6cjDcmepoQv8S5LrSoQ87YWSN";}"}
  [Response Headers] {"content-type":["text/html; charset=UTF-8"]}
 I see "Contact","h1"
 I see validation error "Name cannot be blank"
   I see "Name cannot be blank",".help-block"
 I see validation error "Email cannot be blank"
   I see "Email cannot be blank",".help-block"
 I see validation error "Subject cannot be blank"
   I see "Subject cannot be blank",".help-block"
 I see validation error "Body cannot be blank"
   I see "Body cannot be blank",".help-block"
 I see validation error "The verification code is incorrect"
   I see "The verification code is incorrect",".help-block"
 PASSED
Спасибо Александр)
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Ответить