Php Laravel 5不在数据库中存储特殊字符
我使用的是laravel 5.2,以下是我的数据库配置设置:Php Laravel 5不在数据库中存储特殊字符,php,mysql,database,laravel,utf-8,Php,Mysql,Database,Laravel,Utf 8,我使用的是laravel 5.2,以下是我的数据库配置设置: 'charset' => 'utf8', 'collation' => 'utf8_general_ci', 我也尝试了'utf8\u unicode\u ci'作为排序规则,但它也不起作用 用例:这是我试图插入的文本: $str=“4月9日,我的人生道路” 但这是在存储: Après 9 mois passés dans le 在数据库.php中插入: 'charset'
'charset' => 'utf8',
'collation' => 'utf8_general_ci',
我也尝试了'utf8\u unicode\u ci'
作为排序规则,但它也不起作用
用例:这是我试图插入的文本:
$str=“4月9日,我的人生道路”
但这是在存储:
Après 9 mois passés dans le
在
数据库.php中插入:
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
这将允许您以所需格式保存字符串
并且请确保您的MySQL设置为utf8
您看到的是被替换的文本,这通常是直接来自HTML源的文本的结果(包含先前转换为htmlentities
的文本的表单或其他源)
这里的理想解决方案是确保文本不会以HTML实体编码的形式接收,但是如果这不是一个选项(通常不是),您可以使用:
$decoded = html_entity_decode($text);
在插入实体之前将其解码为实际字符
一些琐事:
实际上,只要正确发送Unicode文本,就不需要将所有字符编码到它们对应的实体中以显示在HTML上。这就是为什么PHP有两个不同的函数,其中第一个函数只编码不破坏HTML所需的编码(手册中列出的5个字符,&“and”)而第二个基于链接表对所有内容进行编码。是一个类型问题。请检查您是否在任何地方对文本执行htmlentities
,或者您是否没有从源代码处接收到它(我猜是表单?)我使用了htmlentities
,但它仍然不起作用。请确保您没有执行htmlentities
。还要对文本执行dd(…)
,以查看它是否真的像那样被接收。如果它来自表单,则可能会在提交案例之前转换为html实体,您可以执行html\u实体解码(…)
在插入ittry之前,在文本上转到表,对于每一列,将属性更改为“utf8mb4\u unicode\u ci”…如果这没有帮助,那么您的IDE中就有问题“html实体”不是MySQL处理的问题。