如何用值上的三个点解码JSON

时间:2018-10-29 10:14:01

标签: php

我做了一些研究,但似乎找不到答案。

问题:
我从awk 'FNR==NR {a[$0]++;next}{if ($1 in a && $2 in a) {print}}' input.txt edge.txt 返回了一个带有以下JSON的空值:

json_decode()

在测试中,我发现通过删除{ "sku": "Yumeida/A-6083/Pink/28", "quantity": 1, "variation": "…, size:EU:28" } 键中的三个点,JSON返回了预期的数组。但是我不明白的是为什么三个点引起了这个错误?

我尝试在解码之前variation JSON,这就是我得到的:

var_dump

有一个“。”(黑框中的问号)。这是字体问题吗?还是其他?

其他信息:JSON是从MySQL数据库中检索的。

编辑:
评论者建议在https://apps.timwhitlock.info/unicode/inspect上显示三个点(string '[{"sku": "Yumeida/A-6083/Pink/28", "quantity": 1, "variation": "�, size:EU:28"}]' (length=80) )被解析为...

3 个答案:

答案 0 :(得分:0)

当前解决方案来自@TsV(https://stackoverflow.com/users/10111639/tsv)。
使用mb_convert_encoding函数,现在显示为常规?,并且不会使脚本崩溃。
我现在将坚持使用此方法,如果有人知道如何保存点,请发布答案。

感谢所有尝试给出答案的人。

https://stackoverflow.com/users/157957/imsop  
https://stackoverflow.com/users/1136527/alex-mcmillan  
https://stackoverflow.com/users/19068/quentin  
https://stackoverflow.com/users/13508/%C3%81lvaro-gonz%C3%A1lez  

答案 1 :(得分:0)

您应该将default_charset设置为UTF-8:

default_charset =“ utf-8”

如果您要输出UTF-8编码的字符,您还需要确保将Web服务器设置为输出UTF-8。在Apache中,可以在httpd.conf文件中进行设置:

AddDefaultCharset UTF-8

之后,您的结果如下: string(69)“ {” variation“:” ...,大小:EU:28“,”跟踪代码“:” LXRP-1868511636“}”

答案 2 :(得分:-5)

我认为问题在于PHP将3个点视为splat运算符(see here for more info)。因此,您可能需要用其他东西替换省略号或用str_replace('...','',$string)

完全删除省略号