Here is one older discussion that let to Zn going away from the better safe 
than sorry approach to encoding:

http://forum.world.st/Zinc-How-to-use-the-character-in-an-URL-td4716386.html#a4716459

You have to read it up to the end.

> On 11 Jun 2015, at 16:19, Jimmie Houchin <jlhouc...@gmail.com> wrote:
> 
> This is exactly why I expressly state I am not a language lawyer and 
> explicitly do not know what is and is not expressly forbidden or allowed with 
> regards to a comma.
> 
> You are correct about the Wikipedia article.
> 
> Is it every wrong or illegal to use a complete safely encoded request? Is it 
> just simply not required?
> So not fully encoded is still valid and legal and also the fully encode is 
> also fully valid and legal.

Yes, any server should accept all encodings.

However, the following are different:

http://foo.com/bar?x=1

http://foo.com/bar?x%3D1

In the second case, you take away the meaning of = by encoding it. So you just 
can't encode everything everywhere.

> eg:
> http://yourserver.com/path?options=eggs,toast,coffee
> is fully valid and legal, but may encounter problems depending to whom the 
> request is made and their implementation?
> Encoding is not required but is at the discretion of the server 
> implementation?
> 
> http://yourserver.com/path?options=eggs%2Ctoast%2Ccoffee
> is fully valid and legal and is always usable and will never encounter 
> problems?
> All valid server side implementations will handle this properly?
> 
> Since I am sure that the API that I am writing for is probably not the only 
> server implementation which requires the comma to be encoded.

Actually, this is the first time I hear of a problem with ,

So, from that perspective, the server might be in error.

> And regardless of legality of the use of comma it appears that some 
> implementers are on the "to be safe we encode everything" side of things. It 
> would be nice to have some option which allows us to encode all to be safe 
> option.

Yes, maybe such an option would be good, but only if it is really needed.

> Thanks for listening and your help.
> 
> Jimmie
> 
> 
> 
> 
> On 06/11/2015 01:35 AM, Sven Van Caekenberghe wrote:
>> @everybody
>> 
>> The key method that defines how the query part of a URL is percent encoded 
>> is ZnMetaResourceUtils class>>#querySafeSet
>> 
>> Years ago, Zinc HTTP Components followed the better safe than sorry approach 
>> of encoding almost every character except for the ones that are safe in all 
>> contexts.
>> 
>> Later on, we began reading the specs better and decided to follow them more 
>> closely, that is why there are now different safe sets.
>> 
>> Now, we can (and should) all read the different specs, and try to learn from 
>> things in the wild as well from other implementations.
>> 
>> The quote from http://en.wikipedia.org/wiki/Query_string was incomplete, it 
>> said 'for HTML 5 when submitting a form using GET', which is a very specific 
>> context.
>> 
>> ZnUrl was written against RFC 3986 mostly.
>> 
>> Now, maybe we made a mistake, maybe not.
>> 
>> But maybe it also would be a good idea to allow users to decide this for 
>> themselves on a case by case basis.
>> 
>>> On 11 Jun 2015, at 05:18, Jimmie Houchin <jlhouc...@gmail.com> wrote:
>>> 
>>> Thanks for the reply.
>>> 
>>> I implemented Peter's suggestion as an easy keep moving solution.
>>> 
>>> As I said, I am not expert in what is or is not legal according to the 
>>> standards.
>>> However, looking at Python, their urllib library in the quote and urlencode 
>>> methods they encode the commas by default.
>>> 
>>> _ALWAYS_SAFE = frozenset(b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>>                          b'abcdefghijklmnopqrstuvwxyz'
>>>                          b'0123456789'
>>>                          b'_.-')
>>> 
>>> https://docs.python.org/3/library/urllib.parse.html
>>> https://hg.python.org/cpython/file/3.4/Lib/urllib/parse.py
>>> 
>>> That's at least how one major language understands the standard. And Python 
>>> 2.7 is the same.
>>> 
>>> According to Wikipedia
>>> http://en.wikipedia.org/wiki/Query_string
>>> • Characters that cannot be converted to the correct charset are replaced 
>>> with HTML numeric character references[9]
>>> • SPACE is encoded as '+'
>>> • Letters (A–Z and a–z), numbers (0–9) and the characters '*','-','.' and 
>>> '_' are left as-is
>>> 
>>> It appeared in the stackoverflow article I quoted previously that ASP.NET 
>>> encodes commas. I could misunderstand or be reading into it.
>>> http://stackoverflow.com/questions/8828702/why-is-the-comma-url-encoded
>>> Just a little more information to add to the discussion.
>>> 
>>> Thanks.
>>> 
>>> Jimmie
>>> 
>>> 
>>> 
>>> 
>>> On 06/10/2015 05:56 PM, Norbert Hartl wrote:
>>>> Just to clarify:
>>>> 
>>>> "
>>>> Characters in the "reserved" set are not reserved in
>>>>           all contexts.
>>>> 
>>>>    The set of characters actually reserved within any given URI
>>>>    component is defined by that component. In general, a character is
>>>>    reserved if the semantics of the URI changes if the character is
>>>>    replaced with its escaped US-ASCII encoding."
>>>> 
>>>> If I were you I'd subclass ZnUrl and implement
>>>> #encodeQuery:on:
>>>> on that class. You could have an extension method in ZnResourceMetaUtils 
>>>> that returns the character set you need to have encoded. In ZnClient you 
>>>> just set your ZnUrl derived class object as #url:
>>>> Cannot think of anything better for a quick resolve of your problem.
>>>> Norbert
>>>>> Am 11.06.2015 um 00:26 schrieb Jimmie Houchin <jlhouc...@gmail.com>:
>>>>> 
>>>>> I am not an expert on URIs or encoding. However, this is a requirement of 
>>>>> the API I am using and I am required to submit an encoded URI with %2C 
>>>>> and no commas.
>>>>> 
>>>>> As far as commas needing to be escaped, it seems from other sources that 
>>>>> they should be.
>>>>> 
>>>>> From https://www.ietf.org/rfc/rfc2396.txt
>>>>> The plus "+", dollar "$", and comma "," characters have been added to
>>>>>    those in the "reserved" set, since they are treated as reserved
>>>>>    within the query component.
>>>>> 
>>>>> States that commas are reserved within the query component.
>>>>> 
>>>>> 
>>>>> http://stackoverflow.com/questions/8828702/why-is-the-comma-url-encoded
>>>>> 
>>>>> 
>>>>> Regardless of what is or is not required, I do need the ability to have a 
>>>>> query string with commas encoded as %2C in order to satisfy and use the 
>>>>> API which states.
>>>>> 
>>>>> fields: Optional An URL encoded (%2C) comma separated list of instrument 
>>>>> fields that are to be returned in the response. The instrument field will 
>>>>> be returned regardless of the input to this query parameter. Please see 
>>>>> the Response Parameters section below for a list of valid values.
>>>>> 
>>>>> Which will look like this or something similar.
>>>>> 
>>>>> fields=displayName%2Cinstrument%2Cpip
>>>>> 
>>>>> 
>>>>> Thanks.
>>>>> 
>>>>> Jimmie
>>>>> 
>>>>> 
>>>>> On 06/10/2015 03:27 PM, Norbert Hartl wrote:
>>>>>> That's because the comma does not need to be escaped in the query part 
>>>>>> of the uri.
>>>>>> 
>>>>>> Norbert
>>>>>> 
>>>>>> 
>>>>>>> Am 10.06.2015 um 22:00 schrieb Jimmie Houchin <jlhouc...@gmail.com>
>>>>>>> :
>>>>>>> 
>>>>>>> On 06/10/2015 10:32 AM, Sven Van Caekenberghe wrote:
>>>>>>> 
>>>>>>>>> On 10 Jun 2015, at 17:24, David <stormb...@gmail.com>
>>>>>>>>>  wrote:
>>>>>>>>> 
>>>>>>>>> El Wed, 10 Jun 2015 10:14:37 -0500
>>>>>>>>> Jimmie Houchin
>>>>>>>>> <jlhouc...@gmail.com>
>>>>>>>>> 
>>>>>>>>> escribió:
>>>>>>>>> 
>>>>>>>>>> Hello,
>>>>>>>>>> 
>>>>>>>>>> I am attempting to use ZnClient to request data. The request requires
>>>>>>>>>> a %2C (comma) delimited string as part of the query. Below is a
>>>>>>>>>> snippet.
>>>>>>>>>> 
>>>>>>>>>> znClient
>>>>>>>>>>         addPath: '/v1/instruments';
>>>>>>>>>>         queryAt: 'fields' putAll: 'displayName%2Cinstrument%2Cpip';
>>>>>>>>>>         get ;
>>>>>>>>>>         contents)
>>>>>>>>>> 
>>>>>>>>>> The string  'displayName%2Cinstrument%2Cpip'
>>>>>>>>>> is being converted to  'displayName%252Cinstrument%252Cpip'
>>>>>>>>>> which causes the request to fail.
>>>>>>>>>> 
>>>>>>>>>> The query needs to be
>>>>>>>>>> fields=displayName%2Cinstrument%2Cpip
>>>>>>>>>> 
>>>>>>>>>> I have not found how to do this correctly.
>>>>>>>>>> Any help greatly appreciated.
>>>>>>>>>> 
>>>>>>>>>> Thanks.
>>>>>>>>>> 
>>>>>>>>>> Jimmie
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> Maybe a silly thing, but since %2C = , ... Did you tried already to
>>>>>>>>> make itself encode that? Like
>>>>>>>>> znClient
>>>>>>>>>          addPath: '/v1/instruments';
>>>>>>>>>          queryAt: 'fields' putAll: 'displayName,instrument,pip';
>>>>>>>>>          get ;
>>>>>>>>>          contents)
>>>>>>>>> 
>>>>>>>>> I suspect it is using encoding internally, that is why % is also
>>>>>>>>> encoded if you try to put it.
>>>>>>>>> 
>>>>>>>>> I hope that works
>>>>>>>>> 
>>>>>>>> Not silly and no need to suspect, but absolutely correct !
>>>>>>>> 
>>>>>>>> Sven
>>>>>>>> 
>>>>>>> My apologies for not having full disclosure.
>>>>>>> 
>>>>>>> Pharo 4, new image, freshly installed Zinc stable version.
>>>>>>> Xubuntu 15.04
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> That is what I thought would happen and what I tried first. But it is 
>>>>>>> not being encoded from what I can find.
>>>>>>> 
>>>>>>> Inspect this in a workspace/playground.
>>>>>>> 
>>>>>>> ZnClient new
>>>>>>>        https;
>>>>>>>        host: '
>>>>>>> google.com
>>>>>>> ';
>>>>>>>        addPath: '/commaTest';
>>>>>>>        queryAt: 'fields' put: 'displayName,instrument,pip';
>>>>>>>        yourself
>>>>>>> 
>>>>>>> View the  request / requestLine / uri.  The commas are still present in 
>>>>>>> the URI.
>>>>>>> So I tried encoding myself and get the other error.
>>>>>>> 
>>>>>>> Of course Google won't understand this and in this snippet won't 
>>>>>>> receive it.
>>>>>>> 
>>>>>>> And please let me know if I am doing something wrong.
>>>>>>> 
>>>>>>> Any help greatly appreciated.
>>>>>>> 
>>>>>>> Jimmie
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>> 
> 
> 


Reply via email to