NSString 组件分离dBy字符串"&"但忽略"& amp;"



需要在&上分隔字符串,但在&上不需要分隔字符串。

有没有一种更优雅的方法来编码它,而不仅仅是先替换它,然后在&上分离它? 喜欢这个。。。

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实体或引用,则会遇到问题,因此除非您绝对确定"&"是唯一的实体或引用,否则您将需要一个更强大的解决方案。

最新更新