json_encode()UTF-8错误

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)