Edit report at https://bugs.php.net/bug.php?id=63898&edit=1
ID: 63898 Comment by: Sjon at hortensius dot net Reported by: sreed at ontraport dot com Summary: json_encode sets string to null for invalid characters Status: Open Type: Bug Package: JSON related Operating System: All PHP Version: 5.4.10 Block user comment: N Private report: N New Comment: This actually worked fine in 5.3.14 but was broken in 5.3.14: http://3v4l.org/Eouni#v5314 5.2.0 - 5.2.6 would truncate the character without notice but wouldn't produce invalid json either Previous Comments: ------------------------------------------------------------------------ [2013-01-04 01:06:40] sreed at ontraport dot com . ------------------------------------------------------------------------ [2013-01-04 01:04:31] sreed at ontraport dot com Description: ------------ When you use json_encode with an invalid UTF-8 byte sequence in a string PHP will generate a warning (with display_errors set to off) and the function returns an invalid json encoded string. The string with the invalid UTF-8 byte sequence is replaced with null (for example: {null:""}). This is invalid json and can not be decoded with json_decode. I would think the expected behavior should be that json_encode should never returns an invalid json encoded string. It should either return false on failure as the documentation states or the invalid UTF-8 byte sequence should be handled in a way that does not corrupt the json string. Test script: --------------- $key = "Foo " . chr(163); $array = array($key => ""); var_dump($array); $json = json_encode($array); echo $json."\n"; var_dump(json_decode($json)); Expected result: ---------------- I would expect the returned json string to be valid or for json_encode to return false. Actual result: -------------- array(1) { ["Foo �"]=> string(0) "" } {null:""} NULL ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=63898&edit=1