Laravel 5雄辩地不在数据库中存储特殊字符

时间:2018-10-03 12:05:29

标签: php mysql database laravel utf-8

我正在使用laravel 5.2,这是我的数据库配置设置:

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

我也尝试将'utf8_unicode_ci'用作排序规则,但它也无法正常工作。

用例:这是我要插入的文本:

  

$ str =“ 9月9日发布”

但这正在存储:

Après 9 mois passés dans le

2 个答案:

答案 0 :(得分:1)

您看到的是将文本替换为HTML entities,这通常是文本直接来自HTML来源的结果(先前已转换为htmlentities的文本形式或其他来源)。

这里的理想解决方案是确保不会以HTML实体编码方式接收文本,但是,如果这不是一种选择(通常不是这样),则可以使用:

 $decoded = html_entity_decode($text); 

在插入实体之前将其解码为实际字符。

一些琐事:

只要正确发送Unicode文本,您实际上不需要将所有字符编码为它们对应的实体即可在HTML上显示。这就是为什么PHP具有2个不同的功能htmlspecialcharshtmlentities的原因,其中第一个功能仅编码为不破坏HTML而必须编码的内容(手册中<,>和&列出的5个字符,“和”),而第二个则基于链接表对所有内容进行编码。

答案 1 :(得分:0)

在您的Database.php中插入:

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

这应该允许您以所需的格式保存字符串。

并且请确保您的MySQL设置为utf8