我安装了Laravel 5.6,其中charset和collation的config/database.php
选项分别设置为utf8mb4
和utf8mb4_unicode_ci
。
我输出的是一个简单的RSS提要(所以XML)。我在标头响应中将字符编码作为UTF-8发送(例如:return response()->view('rss', $data)->header('Content-Type', "text-xml; charset=utf-8");
并在XML文件中使用<?xml version="1.0" encoding="UTF-8" ?>
。
在本地,在运行Valet和PHP 7.2的我的mac上,一切都很好,但是当部署到Forge被提供服务器时,输出是错误的。我继续检查,如果它有所不同,我也在服务器上生成了一些使用字符的语言环境,所以它不可能是那样。
现在,几年前,我已经跳过utf8_encode
并完成了它,但我从来没有这么做过这么久,我无法理解我的事实应该使用它。我相信我不必。但我无法看到事情被扰乱的地方,所以我愿意接受任何输入!这里出了什么问题?
精确度:以下是错误输出的示例。在本地,我收到了这个字符串:L'Allongé
。在服务器上,它输出:L'Allongé
。现在,为'
的XML字符串输出的字符有点好(但我仍然不明白为什么它不同),真正的麻烦在于é
似乎编码错误。
答案 0 :(得分:0)
解析é
作为ISO-8859-1给出了二进制值C3 A9
。这恰好是è
的UTF-8表示。 (您可以在https://unicode-table.com/en/00E9/)
最可能的原因是您正在提供UTF-8字节,但浏览器会将其解析为ISO-8859-1。虽然您声称在多个位置发送编码声明,但请验证浏览器编码。 Chrome已将这些设置隐藏在较新版本中,但Firefox仍然允许您通过汉堡菜单&gt;更改页面的编码。更多&gt;文字编码。
另一种情况涉及无法存储正确的数据。这通常涉及来自混淆其编码的第三方的数据。