यदि मान स्ट्रिंग हैं, तो अन्य उत्तर बहुत बढ़िया काम करते हैं, हालाँकि यदि मान शब्दकोश या सरणियाँ हैं तो यह कोड इसे संभाल लेगा।
यह नोट करना महत्वपूर्ण है कि क्वेरी स्ट्रिंग के माध्यम से किसी सरणी / शब्दकोश को पारित करने का कोई मानक तरीका नहीं है, लेकिन PHP इस आउटपुट को ठीक से संभालता है
-(NSString *)serializeParams:(NSDictionary *)params {
/*
Convert an NSDictionary to a query string
*/
NSMutableArray* pairs = [NSMutableArray array];
for (NSString* key in [params keyEnumerator]) {
id value = [params objectForKey:key];
if ([value isKindOfClass:[NSDictionary class]]) {
for (NSString *subKey in value) {
NSString* escaped_value = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)[value objectForKey:subKey],
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
[pairs addObject:[NSString stringWithFormat:@"%@[%@]=%@", key, subKey, escaped_value]];
}
} else if ([value isKindOfClass:[NSArray class]]) {
for (NSString *subValue in value) {
NSString* escaped_value = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)subValue,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
[pairs addObject:[NSString stringWithFormat:@"%@[]=%@", key, escaped_value]];
}
} else {
NSString* escaped_value = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)[params objectForKey:key],
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
[pairs addObject:[NSString stringWithFormat:@"%@=%@", key, escaped_value]];
[escaped_value release];
}
}
return [pairs componentsJoinedByString:@"&"];
}
उदाहरण
[foo] => bar
[translations] =>
{
[one] => uno
[two] => dos
[three] => tres
}
foo = पट्टी और अनुवाद [एक] = uno और अनुवाद [दो] = डॉस और अनुवाद [तीन] = ट्रेस
[foo] => bar
[translations] =>
{
uno
dos
tres
}
foo = पट्टी और अनुवाद [] = uno और अनुवाद [] = डॉस और अनुवाद [] = ट्रेस