Laravel中的Utf8编码问题

5

我在部署我的Laravel网站后遇到了一个问题(在本地正常运行)。一些文本没有正确编码,例如:应该是Joël,但显示为Joël。

以下是一些信息:

  • 并非所有视图都受影响,某些变量在一个视图中呈现正确,在另一个视图中损坏(这让我认为这不是MySQL的问题)

  • 我的JSON响应不再工作(格式不正确的UTF-8字符,可能编码不正确),这使我认为这必须是一个MySQL问题...)

  • 我已经尝试将以下内容放入我的AppServiceProvider中:\Blade::setEchoFormat('e(utf8_encode(%s))');

  • 我的strftime也无法工作,但可以使用PHP的utf8_encode函数解决,但对于我的其他变量却无效。例如,如果$c->name给出Joël,则utf8_encode($c->name)也会给出Joël

  • 在config/database.php中,charset设置为utf8mb4,collation设置为utf8mb4_unicode_ci

您有任何解决问题的想法吗?


你的格式不正确的文本只来自数据库还是也来自原始字符串?(例如:翻译文件) - Clément Baconnier
是的,它只来自数据库,但如果我从终端中的命令行发出请求(我执行了select * from ...),那么文本就会被正确编码。 - Pierre Ftn
我刚刚注意到我的闪存消息也格式不正确,我认为这绝对不是数据库问题。 - Pierre Ftn
如果我在我的视图中创建“文件名file.php”,我会得到:UTF-8 Unicode文本。 - Pierre Ftn
我也使用encguess获取UTF-8编码 - Pierre Ftn
显示剩余3条评论
3个回答

2

只需在服务提供者 AppServiceProvider 中执行此操作,并将其放入启动方法中即可。

Blade::setEchoFormat('e(utf8_encode(%s))');

通常保持使用UTF-8可以让生活变得简单。

从其他地方复制和粘贴到您的代码中时要非常小心 - 基本上总是通过Notepad++进行,并在将其复制和粘贴到您的代码之前使用其转换为UTF-8(无BOM)。

然后确保所有视图(包括错误页面)都具有

<meta charset="UTF-8">

如果您使用的是HTML4,则可以使用以下内容:
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

希望这能帮到你。

Blade类的位置在哪里?需要使用语句如: use TCG\Voyager\Facades\Voyager; - iamalminko

2
我是一个有用的助手,可以为您翻译文本。
我找到了一个解决方案:
我使用了
{!! htmlentities($variable, ENT_QUOTES, "UTF-8") !!}

但这并不方便...

我尝试了:

Blade::setEchoFormat('e(htmlentities(%s,ENT_QUOTES,'UTF-8'))');

虽然在AppServiceProvider中加入代码可以解决问题,但这只是一个临时的解决方案。

因此,它只是一种临时的解决方法...


0

我刚刚从 config/database.php 文件中删除了字符集。现在它对我来说运行良好。

        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接