Страница 1 из 1

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

Добавлено: 2017.08.06, 14:29
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.
Ошибка появляется только в тестах, причем в функциональных, юнит тесты проходятся на ура.

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

Добавлено: 2017.08.06, 14:30
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.

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

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

Почему возникла эта ошибка, когда раньше её не было, и в проектах ничего не менялось, кроме обновлений composer update.
Причем как написал в первом посте, что поставил ради эксперимента advanced, и из коробки получаем то что получаем.

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

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

Почему возникла эта ошибка, когда раньше её не было
ошибки всегда возникают, когда раньше их не было. Причину можно увидеть с помощью дебага. Где дебажить - в ошибке указано. Вот вам "по объективнее".

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

Добавлено: 2017.08.06, 14:52
Dominus
А вы мастер сарказма. Всё это понятно и без вашего ответа.

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

Добавлено: 2017.08.06, 14:55
zelenin
Dominus писал(а): 2017.08.06, 14:52 А вы мастер сарказма. Всё это понятно и без вашего ответа.
так к чему тогда вообще вопрос? ответ на вопрос "почему в json_encode приходит неправильный utf-8" в ваших руках. Никто на форуме не имеет доступа к вашему коду.

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

Добавлено: 2017.08.06, 14:58
Dominus
Если прочитать внимательнее первый пост то там написано что из коробки, моего кода там по сути нет.

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

Добавлено: 2017.08.06, 15:05
zelenin
Dominus писал(а): 2017.08.06, 14:58 Если прочитать внимательнее первый пост то там написано что из коробки, моего кода там по сути нет.
написанного тобой может и нет, а код весь - твой, а не мой. Дебажь.

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

Добавлено: 2017.08.06, 15:16
Dominus
Лучше вообще не отвечать, чем показывать виртуозность в сарказме.
Дебажу, ищу, смысл темы в том, что бы узнать, у меня у одного такая проблема или кто то еще сталкивался с этим, массовая ошибка или нет, для того что бы понять с чем это связанно.
В Google толком ничего не нашел, поэтому написал пост тут.

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

Добавлено: 2017.08.06, 15:24
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 и откуда. Это уже смешно.

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

Добавлено: 2017.08.06, 15:33
Dominus
Вам смешно с вашего первого поста, это я уже заметил.

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

Добавлено: 2017.08.06, 21:00
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.

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

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

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

Добавлено: 2017.08.07, 19:15
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
Спасибо Александр)