I'm having some problem getting text with special characters (Swedish: "åäö") from the database.
If I just do a normal query,
"SELECT * FROM"
and the echo
out the result:
while($row = mysql_fetch_assoc($result))
{
echo $row['text'];
}
... the result is fine.
However, when doing json_encode($array)
, the special characters have been replaced:
{"id":"1","question":"fr\u00e5ga \u00e5\u00e4\u00f6"....
I don't know how many different things I tried, including converting the database to UTF-8, fields to utf8_general_ci
, utf8_encode($string)
, utf8_decode($string)
, ....
Your output is correct; that's how you're supposed to embed unicode characters in JSON.
This behavior is by design. Those are JSON Unicode escapes.
Any compliant JSON parser will parse them correctly.
$str='{"id":"1","question":"fr\u00e5ga \u00e5\u00e4\u00f6"}';
$obj=json_decode($str);
var_dump($obj);
Outputs this
object(stdClass)#1 (2) {
["id"]=>
string(1) "1"
["question"]=>
string(13) "fråga åäö"
}
So all is well - you're just seeing the JSON encoding of Unicode characters.
In PHP 5.4, you can pass JSON_UNESCAPED_UNICODE to json_encode, and you'll get back JSON with UTF-8 encoded chars (at least I believe so - haven't tested that yet)