Mark Karpeles wrote: > Le samedi 13 décembre 2008 à 03:50 +0000, Scott MacVicar a écrit : >> Hi All, >> >> Basic types were added to our JSON decoder to PHP 5.2.1, this allows >> one to use json_encode / json_decode on any of our scalar types. Omar >> correctly identified #38680 as not a bug but it appears that Ilia >> added support for this anyway violating the RFC [1]. Maybe there was a >> reason for this but I'm not sure why? > > The reason was to "make json_decode() able to decode anything encoded by > json_encode()". I believe many people may be depending on this (I saw a > few codes). > > If json_decode() is made to only accept arrays/struct, the same should > be done to json_encode(). > > For reference I saw people use json_encode() to pass a string to > javascript into their page while avoiding bugs/XSS with stuff like > </script>. > > var foo = <?=json_encode($my_string)?>; > ... (yes, they maybe heared somewhere that JSON is *not* javascript, I > told 'em too). > > I also saw people using json_encode/json_decode as an alternate for > serialize/unserialize. > > Also, reading [2], I see about stringify "If value is an object or > array, the structure will be visited recursively to determine the > serialization of each membr or element.", this seems to assume that > "value" can be something else than "an object or array". > > At least on Firefox 3.2, it is not the case.
I think it does more than assume that. The spec specifically says that the value can be any Javascript value in the prototype: JSON.stringify(value, replacer, space) value any JavaScript value, usually an object or array. replacer an optional parameter that determines how object values are stringified for objects without a toJSON method. It can be a function or an array. space an optional parameter that specifies the indentation of nested structures. If it is omitted, the text will be packed without extra whitespace. If it is a number, it will specify the number of spaces to indent at each level. If it is a string (such as '\t' or ' '), it contains the characters used to indent at each level. I think we should follow the spec, not individual browser implementations. -Rasmus -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php