Laravel 5 красноречиво не хранит специальные символы в базе данных - PullRequest
0 голосов
/ 03 октября 2018

Я использую laravel 5.2, и вот мои настройки конфигурации базы данных:

'charset' => 'utf8',
'collation' => 'utf8_general_ci',

Я также пробовал 'utf8_unicode_ci' в качестве сопоставления, но он также не работает.

Вариант использования: текст, который я пытаюсь вставить:

$ str = "Aprés 9 mois passés dans le"

, но этохранит:

Après 9 mois passés dans le

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Вы видите, что текст заменяется на HTML-сущности Обычно это результат того, что текст поступает непосредственно из источника HTML (либо форма с текстом, который ранее был преобразован в htmlentitiesили другой источник).

Идеальное решение здесь состоит в том, чтобы гарантировать, что текст не будет получен как закодированный объект HTML, однако, если это не вариант (который он очень часто не использует), вы можете использовать:

 $decoded = html_entity_decode($text); 

для декодирования сущностей в их действительные символы перед их вставкой.

Немного мелочей:

На самом деле вам не нужно кодировать все символы вих соответствующие объекты для отображения в HTML, если вы правильно отправляете текст Unicode.Вот почему PHP имеет 2 разные функции htmlspecialchars и htmlentities, где первая функция кодирует только то, что необходимо кодировать, чтобы не нарушать HTML (эти 5 символов перечислены вmanual, <,>, &, "и '), а второй кодирует все на основе связанной таблицы.

0 голосов
/ 03 октября 2018

В вашей Database.php вставке:

'charset'   => 'utf8',
'collation' => 'utf8_unicode_ci',

Это позволит вам сохранить строку в нужном формате.

И, пожалуйста, убедитесь, что ваш MySQL установлен на utf8

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