字符编码在本地和服务器之间输出错误

时间:2018-02-19 15:29:17

标签: php laravel utf-8 character-encoding

我安装了Laravel 5.6,其中charset和collat​​ion的config/database.php选项分别设置为utf8mb4utf8mb4_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&#039;Allongé。现在,为'的XML字符串输出的字符有点好(但我仍然不明白为什么它不同),真正的麻烦在于é似乎编码错误。

1 个答案:

答案 0 :(得分:0)

解析é作为ISO-8859-1给出了二进制值C3 A9。这恰好是è的UTF-8表示。 (您可以在https://unicode-table.com/en/00E9/

找到

最可能的原因是您正在提供UTF-8字节,但浏览器会将其解析为ISO-8859-1。虽然您声称在多个位置发送编码声明,但请验证浏览器编码。 Chrome已将这些设置隐藏在较新版本中,但Firefox仍然允许您通过汉堡菜单&gt;更改页面的编码。更多&gt;文字编码。

另一种情况涉及无法存储正确的数据。这通常涉及来自混淆其编码的第三方的数据。