There is a strange behaviour with json_encode
and json_decode
and I can't find a solution:
My php application calls a php web service. The webservice returns json that looks like this:
var_dump($foo):
string(62) "{"action":"set","user":"123123123123","status":"OK"}"
now I like to decode the json in my application:
$data = json_decode($foo, true)
but it returns NULL
:
var_dump($data):
NULL
I use php5.
The Content-Type of the response from the webservice: "text/html; charset=utf-8"
(also tried to use "application/json; charset=utf-8"
)
What could be the reason?
EDIT: Just did some quick inspection of the string provided by the OP. The small "character" in front of the curly brace is a UTF-8 B(yte) O(rder) M(ark)
0xEF 0xBB 0xBF
. I don't know why this byte sequence is displayed as?
here.Essentially the system you aquire the data from sends it encoded in UTF-8 with a BOM preceding the data. You should remove the first three bytes from the string before you throw it into
json_decode()
(asubstr($string, 3)
will do).As Kuroki Kaze discovered, this character surely is the reason why
json_decode
fails. The string in its given form is not correctly a JSON formated structure (see RFC 4627)