需要在&
上分隔字符串,而不是&
上的字符串。
是否有更优雅的方式对其进行编码而不是先替换它然后在&
上将其分开?像这样......
query = [query stringByReplacingOccurrencesOfString:@"&" withString:@"~~~"];
NSArray * kvpairs = [query componentsSeparatedByString:@"&"];
NSMutableArray *mArr = [[NSMutableArray alloc] init];
for (NSString *kvp in kvpairs) {
[mArr addObject:[kvp stringByReplacingOccurrencesOfString:@"~~~" withString:@"&"]];
}
kvpairs = [NSArray arrayWithArray:mArr];
[mArr release];
答案 0 :(得分:3)
您可以使用NSRegularExpression
枚举匹配&
但不匹配&
的正则表达式上的字符串,例如:@"&(?!amp;)"
。这将比您当前的方法更麻烦,但更准确,因为它可以在不修改原始字符串的情况下工作,并且不依赖于标记值。
如果您控制此方法的输入并且可以保证~~~
不会正常显示,则使用~~~
没有任何问题。但是,如果您不控制输入,那么您应该尝试解析字符串而不进行修改。
答案 1 :(得分:1)
这没有任何问题,只要您100%确定查询中不会出现字符串~~~
。
如果不是,我的下一步是实现一个方法将字符串解析为数组。在这种方法中,您可以找到每个&,然后检查它是否后跟amp;。如果是,则转到下一个,如果不是,则在那里剪切字符串并重复。
答案 2 :(得分:0)
HTML实体和引用在URL中闲置并不是一件好事。除非非常有充分理由认为HTML实体必须,否则我建议在URL编码&符号中使用'%26'。
话虽如此,如果'&'你会遇到问题不是唯一的HTML实体或引用,所以除非你绝对确定'&'是唯一一个,你需要一个更强大的解决方案。