Laravel 5 eloquent 不在数据库中存储特殊字符

Mah*_*Dev 5 php mysql database utf-8 laravel

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

'charset' => 'utf8',
'collation' => 'utf8_general_ci',
Run Code Online (Sandbox Code Playgroud)

我也试过'utf8_unicode_ci'作为整理,但它也不起作用。

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

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

但这是存储:

Après 9 mois passés dans le
Run Code Online (Sandbox Code Playgroud)

apo*_*fos 2

您看到的文本被替换为HTML 实体,这通常是直接来自 HTML 源(包含先前转换的文本的表单htmlentities或其他源)的文本的结果。

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

 $decoded = html_entity_decode($text); 
Run Code Online (Sandbox Code Playgroud)

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

一些琐事:

实际上,只要正确发送 Unicode 文本,您并不需要将所有字符编码为相应的实体以在 HTML 上显示。这就是为什么 PHP 有 2 个不同的函数htmlspecialcharshtmlentities第一个函数只编码必要的内容,以免破坏 HTML(手册中列出的 5 个字符,<、>、&、" 和 '),而第二个函数则编码一切都基于链接表。