需要在&
上分隔字符串,但在&
上不需要分隔字符串。
有没有一种更优雅的方法来编码它,而不仅仅是先替换它,然后在&
上分离它? 喜欢这个。。。
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];
NSRegularExpression
来枚举正则表达式上的字符串,该正则表达式与&
匹配但不&
,例如:@"&(?!amp;)"
。这将比当前方法更麻烦,但更精确,因为它无需修改原始字符串即可工作,并且不依赖于令牌值。
如果您控制此方法的输入并且可以保证~~~
不会正常显示,则使用 ~~~
没有错。但是,如果您不控制输入,则应尝试在不修改的情况下解析字符串。
实际上没有任何问题,只要您 100% 确定字符串~~~
不会出现在查询中。
如果你不是,我的下一步是实现一个方法,将字符串解析为数组。 在此方法中,您可以找到每个 &,然后检查它后面是否跟着 amp;。 如果是,请继续下一个,如果不是,请在那里切断字符串并重复。
HTML实体和引用在URL中徘徊真的不是一件好事。除非有很好的理由必须使用 HTML 实体,否则我建议在 URL 中使用"%26"对 & 符号进行编码。
话虽如此,如果"&"不是唯一的HTML实体或引用,则会遇到问题,因此除非您绝对确定"&"是唯一的实体或引用,否则您将需要一个更强大的解决方案。