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 '&nbsp;'),
              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

Reply via email to