- while ((key = [keys nextObject])) {
- if(![paraKeys containsObject:key]) {
- value = [[_queryDict objectForKey:key] stringValue];
+ while ((key = [keys nextObject]) != nil) {
+ if([paraKeys containsObject:key])
+ /* overridden by a query parameter (?abc=abc) */
+ continue;
+
+ value = [_queryDict objectForKey:key];
+ if ([value isKindOfClass:[NSArray class]]) {
+ /* if we bind the queryDictionary to request.formValues */
+ NSArray *values;
+ unsigned i, count;
+
+ values = (NSArray *)value;
+ for (i = 0, count = [values count]; i < count; i++) {
+ value = [values objectAtIndex:i];
+ value = [value stringValue];
+ value = value ? [value stringByEscapingURL] : @"";
+ key = key ? [key stringByEscapingURL] : @"";
+
+ if (isFirst) isFirst = NO;
+ else [str appendString:@"&"];
+
+ [str appendString:key];
+ [str appendString:@"="];
+ [str appendString:value];
+ }
+ }
+ else {
+ value = [value stringValue];