我使用stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding
将数据传递给php脚本。问题是如果该字段有char'&'在文中可以说:'某人&汽车',只有文字“某人”被保存,一切都在'&'之后没有。
要创建我使用[NSString stringWithFormat:]
的字符串,所以我在表单中有5个字段,如果我使用stringbyReplacingOcorrencesOfstring:@"&"
,它的作用是将整个字符串替换为char'&'从文本字段,所以我得到错误。
有什么想法吗?
答案 0 :(得分:6)
不幸的是,stringByAddingPercentEscapesUsingEncoding:
实际上并没有逃避所有必要的URL字符。
相反,您可以使用较低级别的CoreFoundation函数:
(NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)myString, NULL, (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ", CFStringConvertNSStringEncodingToEncoding(encoding));
或使用ARC时:
CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge CFStringRef)myString, NULL, (__bridge CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ", CFStringConvertNSStringEncodingToEncoding(encoding)));
有关NSString
上使用此功能的类别示例,请参阅this post。
答案 1 :(得分:2)
如果您想要专门允许自己编码的内容,请使用stringByAddingPercentEncodingWithAllowedCharacters
进行以下工作。我在base64之后使用,所以这很好。
NSString *charactersToEscape = @"!*'();:@&=+$,/?%#[]\" ";
NSCharacterSet *customEncodingSet = [[NSCharacterSet characterSetWithCharactersInString:charactersToEscape] invertedSet];
NSString *url = [NSString stringWithFormat:@"%@", @"http://www.test.com/more/test.html?name=john&age=28"];
NSString *encodedUrl = [url stringByAddingPercentEncodingWithAllowedCharacters:customEncodingSet];