Jawaban lain bekerja dengan baik jika nilainya adalah string, namun jika nilainya adalah kamus atau array maka kode ini akan menanganinya.
Penting untuk dicatat bahwa tidak ada cara standar untuk melewatkan array / kamus melalui string kueri tetapi PHP menangani keluaran ini dengan baik
-(NSString *)serializeParams:(NSDictionary *)params {
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:@"&"];
}
Contoh
[foo] => bar
[translations] =>
{
[one] => uno
[two] => dos
[three] => tres
}
foo = bar & terjemahan [one] = uno & terjemahan [dua] = dos & terjemahan [tiga] = tres
[foo] => bar
[translations] =>
{
uno
dos
tres
}
foo = bar & terjemahan [] = uno & terjemahan [] = dos & terjemahan [] = tres