【发布时间】:2019-06-24 18:58:41
【问题描述】:
我正在从某个位置获取 JSON 文件并将内容传递到我的前端。为此,我有如下内容
return response()->json(json_decode(file_get_contents('some/path', true)));
但是,有时我注意到由于格式错误的 utf-8 字符而失败。我查看了 JSON 文件,并注意到有时像 £ 符号这样的东西被表示为一个奇怪的符号,例如
{
"ID": "123",
"Date": "08/06/2012",
"Amount": "�120.59"
}
处理这种情况的最佳方法是什么?目前,我正在尝试类似以下的方法
$data = file_get_contents('some/path', true);
$encoding = mb_detect_encoding($data, mb_detect_order(), true);
if($encoding !== "UTF-8") {
return response()->json(json_decode(utf8_decode($data)));
}
return response()->json(json_decode($data));
这似乎可行,但不确定它是否是最好的方法?我检查它是否是 UTF-8 的原因是因为如果我尝试在已经是 UTF-8 的东西上使用 utf8_decode,它会失败。
这是处理 JSON 文件中奇怪字符的最佳方法吗?
谢谢
【问题讨论】:
-
不是UTF8的时候使用什么编码?因为utf8_encode() 只编码 ISO-8859-1。 mb_convert_encoding() 可以做得更多。
-
说实话我不知道。当没有有趣的字符时,它似乎是 UTF-8。当有搞笑字符时,detect_encoding 返回 false
-
mb_detect_encoding()可能返回 false,因为$data的位太小而无法检测编码,但它知道它不能是 UTF-8。我无法判断您的情况,但找出编码的真正含义是有意义的。我怀疑似乎是 UTF-8 的位使用相同的编码但缺少非 UTF-8 字符。因此,如果您知道真正的编码,您就可以正确处理所有数据。 -
如果不是一些敏感信息,您可以在这里发布示例 JSON 文件吗?我说的是发布完整文件,而不是复制粘贴——这会删除大部分有趣的信息,如 BOM(UTF 标头)等。