I’ve got an ISO string that I fetch from database, and when I utf8_encode it, I get a \u00f6 instead of Ö. This confuses the javascript/html which ajaxes this PHP script. Why is there a \u00f6 instead of Ö? How to get Ö instead?
edit:
Ok, I did some more experimenting and it turns out this is caused by combination of utf8_encode and json_encode. Though if I don’t utf8_encode at all, the value will be null in the json.
json_encode(array("city"=>utf8_encode("göteborg")))
utf8_encodedoesn’t encode characters to\uxxxx, as you figured out yourself it’sjson_encodedoing this. And that’s fine, because the JSON format specifies this behavior. If your client properly decodes the JSON string into a Javascript data type, the\uxxxxescapes will be turned into proper Unicode characters.As for
json_encodediscarding characters if your string is Latin1 encoded: It’s not explicitly stated on the manual page, but Javascript and JSON are entirely Unicode based, so I suspect Latin1 is an invalid and unexpected encoding to use with JSON strings, so it breaks.