I've some problem retrieving json information with a PHP.
I've created a simple php page that returns a json:
$data = array(
'title' => 'Simple title'
);
print json_encode($data);
And in another page I try to get that array as an object:
$content = file_get_contents($url);
$json_output = json_decode($content, true);
switch(json_last_error())
{
case JSON_ERROR_DEPTH:
echo ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
echo ' - Syntax error, malformed JSON';
break;
case JSON_ERROR_NONE:
echo ' - No errors';
break;
}
The problem is that there is an error with this approach: I receive a "JSON_ERROR_SYNTAX" because after "file_get_contents" function I have an unknown character at the beginning of the string.
If I copy/paste it on Notepad++ I didn't see:
{"title":"Simple title"}
but I see:
?{"title":"Simple title"}
Could someone help me?
-
A little update: if I use the php function "utf8_encode" on the returned string, there is this "" at the beginning of the string... I don't know why ...user813891– user8138912011年10月03日 14:01:15 +00:00Commented Oct 3, 2011 at 14:01
-
That's UTF-8 BOM (en.wikipedia.org/wiki/Byte_order_mark), you should delete it ;)ComFreek– ComFreek2011年10月03日 14:06:01 +00:00Commented Oct 3, 2011 at 14:06
4 Answers 4
Make sure both your scripts have same encoding - and if it's UTF make sure they are without Byte Order Mark (BOM) at very begin of file.
What about
$content = trim(file_get_contents($url));
?
Also, it sounds as if there was a problem with the encoding within the PHP that echos your JSON. Try setting proper (as in: content-type) headers and make sure that both files are UTF-8 encoded.
Also: What happens if you open $url in your browser? Do you see an "?"
2 Comments
I am pretty sure your page that does the json_encode has a stray ?. Look in there for a missing > in terms of ?> and such.
Look through your PHP for a stray "?".