Laravel не может получить ответ для правильного разбора иностранных символов - PullRequest
0 голосов
/ 12 июня 2018

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

У меня есть база данных пользователей, которая будет перечислять по первой буквеимени в каталоге.Однако есть один пользователь, который ломает результаты, потому что его имя начинается с буквы с иностранным символом, а именно А.

Я получаю результаты пользователя с:

$users = $this->users->getAll($params);

И затем возвращаюответ с использованием коллекции, которая кодирует его в json:

return response()->collection($users);

Но я получаю следующую ошибку, если в результатах возвращается указанный выше пользователь:

Содержимое ответа должно быть строкой или объектомреализация __toString (), дано «логическое».

Я пытался использовать опцию JSON_UNESCAPED_UNICODE, как многие предлагают в решениях, таких как:

return response()->json($users, 200, ['Content-type'=> 'application/json; charset=utf-8'], JSON_UNESCAPED_UNICODE);

, нооказывается, что ответ не возвращается как UTF-8 после попытки войти в систему.Однако, насколько я могу судить, база данных имеет кодировку UTF-8, поэтому я не понимаю, что здесь происходит.

Проблема в том, что даже если бы я сменил символ на обычный A,все еще могут быть будущие пользователи с иностранными символами в своем имени, и я бы предпочел что-то для этого сделать.

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

В config / database.php:

'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => null,
    ],

А теперь сделайте сопоставление столбцов как: utf8mb4_unicode_ci.Надеюсь, это работает.Спасибо.

0 голосов
/ 12 июня 2018

сопоставление utf8mb4_unicode_ci отлично работает для меня.
Если вы упомянули сопоставление вашей базы данных, это определит вашу проблему более читабельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...