在 MySQL 表上,release_notes
列以 utf8mb4 编码。
在 Laravel config/database.php
文件中,以下内容位于 MySQL 部分下:
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
在 MySQL 客户端中,我将该列的值设置为表情符号(例如“📌”)。 MySQL客户端正常显示。
要显示该列,在 Blade 模板上我有以下内容:
{!! nl2br($app->release_notes) !!}
但是,最终在浏览器上显示的是:
????
为了验证这不是浏览器/HTML 问题,我将表情符号直接硬编码在模板文件上,并且它按预期显示。
我确实尝试过the accepted answer of this question ,无济于事。
我错过了什么?
最佳答案
正好4个问号?表情符号的长度为 4 个字节。可能的原因是试图将非 latin1 字符转换为 CHARACTER SET latin1
专栏。
检查所有这些:
- 数据库中的列 -- 使用
SHOW CREATE TABLE
验证它们是否显式设置为 utf8,或从表定义中默认设置。 (仅更改数据库默认是不够的。) - 客户端和服务器之间的连接。请参阅
SET NAMES utf8
. - 您拥有的字节数。 (情况大概就是这样。)
- 如果您要在网页中显示文本,请检查
<meta>
标签。
关于php - MySQL 中的 Unicode 字符(表情符号)显示为 "????",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33558637/