[squeak-dev] Re: [Seaside] SqueakSource/Seaside question - has anyone seen this problem before?

Bob Arning arning315 at comcast.net
Mon Dec 23 17:16:46 UTC 2013


And I see that's exactly what newer versions of this method do...

decodeUrlEncodedForm: string multipleValues: boolean
     | dict key value start end eqSignPos more |
     dict := boolean ifTrue: [HttpFormDictionary new] ifFalse: 
[Dictionary new].
     string isEmptyOrNil ifTrue: [^dict].
     more := true.
     start := 1.
     [end := string indexOf: $& startingAt: start.
     end == 0
         ifTrue: [end := string size. more := false]
         ifFalse: [end := end - 1].
     eqSignPos := string indexOf: $= startingAt: start.
     (eqSignPos > end or: [eqSignPos == 0])
         ifTrue: [key := (key := string copyFrom: start to: end) 
unescapePercentsWithTextEncoding: nil.
             value := '']
         ifFalse: [key := (key := string copyFrom: start to: 
eqSignPos-1) unescapePercentsWithTextEncoding: nil.
             value := (value := string copyFrom: eqSignPos+1 to: end) 
unescapePercentsWithTextEncoding: nil].
     self addKey: key value: value toForm: dict multipleValues: boolean.
     start := end + 2.
     more] whileTrue.

     ^dict

Cheers,
Bob


On 12/23/13 11:04 AM, Bob Arning wrote:
> I see how it happens...
>
> using Mac, Chrome with 8859-1 encoding as default, I typed
>
>     S, t, option-e, e, p, h, a, n, e
>
> in the login screen. What arrives back at the server is
>
>     '11=St%E9phane&12=&13=Login'
>
> wherupon HttpRequest tries to parse this
> -----
> decodeUrlEncodedForm: string multipleValues: boolean
>     | dict key value start end eqSignPos more |
>     dict _ boolean ifTrue: [HttpFormDictionary new] ifFalse: 
> [Dictionary new].
>     string isEmptyOrNil ifTrue: [^dict].
>     more _ true.
>     start _ 1.
>     [end _ string indexOf: $& startingAt: start.
>     end == 0
>         ifTrue: [end _ string size. more _ false]
>         ifFalse: [end _ end - 1].
>     eqSignPos _ string indexOf: $= startingAt: start.
>     (eqSignPos > end or: [eqSignPos == 0])
>         ifTrue: [key _ (key _ string copyFrom: start to: end) 
> unescapePercents.
>             value _ '']
>         ifFalse: [key _ (key _ string copyFrom: start to: eqSignPos-1) 
> unescapePercents.
>             value _ (value _ string copyFrom: eqSignPos+1 to: end) 
> *unescapePercents*].
>     self addKey: key value: value toForm: dict multipleValues: boolean.
>     start _ end + 2.
>     more] whileTrue.
>
>     ^dict
> -----
> and #unescapePercents does
>
> self unescapePercentsWithTextEncoding: 'utf-8'
>
>     'St%E9phane' unescapePercents ==> 'St鰨ane'
>
> whereas, if we knew it was not utf-8, then
>
>     'St%E9phane' unescapePercentsWithTextEncoding: nil ==> 'Stéphane'
>
> gives the expected answer. I tried to coax my browser to return utf-8, 
> but that had no effect, so I'm wondering if this application would be 
> better off using
> unescapePercentsWithTextEncoding: nil
> rather than
>     unescapePercents
>
> Cheers,
> Bob
>
> On 12/23/13 8:15 AM, Philippe Marschall wrote:
>> On Mon, Dec 23, 2013 at 1:43 PM, Bob Arning<arning315 at comcast.net>  wrote:
>>>   It is a WideString and
>>>
>>> self asArray collect: [ :e | e asciiValue radix: 16] = #('53' '74'
>>> '3FC09C28' '61' '6E' '65' '20' '4D' '75' '6E' '69' '6F' '7A')
>> Interesting, so somebody somewhere along the way converted the input
>> from something (likely utf-8 although the page is iso-8859-1) to
>> Squeak encoding.
>>
>> Cheers
>> Philippe
>> _______________________________________________
>> seaside mailing list
>> seaside at lists.squeakfoundation.org
>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/seaside/attachments/20131223/9ab2dc45/attachment.htm


More information about the seaside mailing list