【问题标题】:Laravel 5 eloquent not storing special characters in databaseLaravel 5 eloquent 不在数据库中存储特殊字符
【发布时间】:2019-03-08 15:54:05
【问题描述】:

我使用的是 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

【问题讨论】:

  • 是类型问题
  • 我明白了。检查您是否没有在任何地方对文本执行htmlentities,或者您没有从源头收到这样的消息(我猜是表格?)
  • 我使用了htmlentities,但仍然无法正常工作
  • 确保你没有在做htmlentities。还要在文本上做一个dd(..),看看它是否真的被这样接收。如果它来自表单,它可能会在提交之前转换为 html 实体
  • 更糟糕的情况下,您可以在插入之前对文本执行html_entity_decode(...)

标签: php mysql database laravel utf-8


【解决方案1】:

您所看到的文本被替换为 HTML entities 这通常是文本直接来自 HTML 源(之前转换为 htmlentities 或其他源的文本的表单)的结果.

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

 $decoded = html_entity_decode($text); 

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

一些琐事:

只要您正确发送 Unicode 文本,您实际上并不需要将所有字符编码为它们对应的实体以在 HTML 上显示。这就是为什么 PHP 有 2 个不同的函数 htmlspecialcharshtmlentities 的原因,其中第一个函数只编码为了不破坏 HTML 所必需的编码(手册中列出的这 5 个字符,、&、" 和 ' ) 而第二个根据链接表对所有内容进行编码。

【讨论】:

    【解决方案2】:

    在你的Database.php 插入:

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

    这应该允许你以你想要的格式保存字符串。

    请确保您的 MySQL 设置为 utf8

    【讨论】:

    • 尝试转到表格,将每一列的属性更改为`utf8mb4_unicode_ci`..如果这没有帮助,那么你的IDE有问题
    • “html 实体”不是 MySQL 处理的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 2021-09-12
    • 2014-10-15
    • 2021-07-06
    相关资源
    最近更新 更多