【发布时间】:2015-02-27 10:29:10
【问题描述】:
我有这个简单的 JSON 字符串:
{"type_voie":"ALL","indice_repetition":"B","num_voie":"1","nom_voie":"Azrty","infos_voie":"Zzz","distribution_speciale":"","cp":"34230","ville":"PLAISSAN","bureau_distributeur":""}
我从我的 utf8 数据库中获取。
当我将它传递给json_decode($json, true) 时,结果为 NULL,json_last_error() 给我 4 (JSON_ERROR_SYNTAX)
如果我做 mb_detect_encoding,我可以看到字符串是 ASCII,但我只在所有地方使用 UTF-8。
字符串最初是通过 AJAX 查询插入到数据库中的。我从一个用 jQuery 函数 serialize() 序列化的表单中得到了日期。
我在我的项目中经常这样做,从来没有遇到过这样的问题。
我尝试使用 iconv、mb_convert_encoding 或 ut8_encode 强制 UTF8,但没有任何改变。
我也尝试使用html_entity_decode(),因为有时 PDO 会替换引号,但结果相同。
编辑:
我的天啊。 对不起。
由于某些原因,在我获得 json 的那一刻和我将它发送到解析器的那一刻之间连接了一个
。
只有PEBKAC....
我很惭愧。
将很快删除此帖子
【问题讨论】:
-
一定有你没有抄袭的角色。当我将该字符串粘贴到我的脚本中时,它工作正常。
-
这是来自 var_dump() 的完整字符串
-
你试过
json_decode( utf8_encode( $json ) )吗? -
是的,还有 iconv()...同样的结果
-
你能将 var_dump 报告的字符串长度与字符串的实际长度进行比较(通过计算屏幕上的字符吗?)?那里可能有不可打印的字符。它将解释为什么复制字符串使其工作,因为不可打印的字符也不能被复制。