【问题标题】:Wrong character encoding with database output using laravel使用 laravel 数据库输出的错误字符编码
【发布时间】:2014-05-14 20:10:41
【问题描述】:

我最近开始在我正在进行的项目中使用 laravel,我目前在以正确的字符编码显示数据库中的数据时遇到问题。

我当前的系统由一个单独的脚本组成,负责用数据填充数据库,而 laravel 项目负责显示数据。使用的视图设置为将所有文本显示为 utf-8,因为我已经在视图中成功打印了特殊字符。数据库中的文本不会打印为 utf8,也不会以正确的方式打印特殊字符。我尝试过同时使用 eloquent 模型和 DB::select(),但它们都显示出同样糟糕的结果。

database.php 中的charset 设置为utf8,而collation 设置为utf8_unicode_ci

数据库表:

CREATE TABLE `RssFeedItem` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`feedId` smallint(5) unsigned NOT NULL,
`title` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
`url` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
`text` mediumtext COLLATE utf8_unicode_ci,
`textSha1` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `url` (`url`),
KEY `feedId` (`feedId`),
CONSTRAINT `RssFeedItem_ibfk_1` FOREIGN KEY (`feedId`) REFERENCES `RssFeed` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6370 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

我还设置了一个测试页面,以查看问题是否可能是我的数据库设置,但测试页面打印的一切都很好。测试页面使用 PDO 选择所有数据,并将其打印在一个简单的 html 页面上。

有谁知道可能是什么问题?除了this link,我尝试过四处搜索,但没有找到任何可能对我有帮助的东西。

【问题讨论】:

    标签: php encoding laravel character


    【解决方案1】:

    我最终还是自己解决了这个问题。问题是由负责用数据填充我的数据库的单独脚本引起的。这是通过在将数据插入数据库之前使用SET NAMES utf8 运行查询来解决的。原始数据被拉出,然后在运行所述查询后送回。

    它在 laravel 之外工作的原因仅仅是因为上述查询没有在我的测试页面上执行。如果我在检索数据之前运行查询,它会出现错误的编码,因为查询表明数据被编码为 utf8,而实际上并非如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      • 2023-03-16
      • 2016-12-03
      • 2023-03-29
      • 2016-02-28
      • 2015-12-02
      • 2017-11-28
      相关资源
      最近更新 更多