Các câu trả lời khác hoạt động tốt nếu giá trị là chuỗi, tuy nhiên nếu giá trị là từ điển hoặc mảng thì mã này sẽ xử lý điều đó.
Điều quan trọng cần lưu ý là không có cách tiêu chuẩn nào để truyền một mảng / từ điển qua chuỗi truy vấn nhưng PHP xử lý đầu ra này rất tốt
-(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:@"&"];
}
Ví dụ
[foo] => bar
[translations] =>
{
[one] => uno
[two] => dos
[three] => tres
}
foo = bar & translate [one] = una & dịch [hai] = dos & dịch [ba] = tres
[foo] => bar
[translations] =>
{
uno
dos
tres
}
foo = bar & translate [] = una & translate [] = dos & translate [] = tres