Objective c StringByAddingPercents转义使用编码不转义“&&引用;

Objective c StringByAddingPercents转义使用编码不转义“&&引用;,objective-c,nsstring,Objective C,Nsstring,我正在使用stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding将数据传递给php脚本。问题是如果字段的文本中有字符'&',比如说:'someone&cars',则只保存文本“someone”,而'&'之后的所有内容都不会保存 为了创建字符串,我使用了[NSString stringWithFormat:,因此我在表单中有5个字段,如果我使用StringByReplacingCorrectionsOfString:@“&”,

我正在使用
stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding
将数据传递给php脚本。问题是如果字段的文本中有字符'&',比如说:'someone&cars',则只保存文本“someone”,而'&'之后的所有内容都不会保存

为了创建字符串,我使用了
[NSString stringWithFormat:
,因此我在表单中有5个字段,如果我使用
StringByReplacingCorrectionsOfString:@“&”
,它所做的是替换整个字符串,而不仅仅是替换文本字段中的字符“&”,因此我得到了错误


有什么想法吗?

不幸的是,
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
类别的示例,请参见。

不幸的是,
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
上的类别示例,请参见。

如果您希望明确允许自己编码的内容,请使用
string添加PercentEncoding with AllowedCharacters
。我使用的是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];

如果您想特别允许自己编码的内容,请使用
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];

ASCII码是否可能重复?这是什么?1980? 祷告经文中永远不要说“是格伦特·苏格伦,是斯潘·布卢滕·布卢亨”;-)严肃地说:您可能应该使用UTF8而不是ASCII。:)好吧,从现在起我肯定会使用,但这并不能解决问题。ASCII是否可能重复?这是什么?1980? 祷告经文中永远不要说“是格伦特·苏格伦,是斯潘·布卢滕·布卢亨”;-)严肃地说:您可能应该使用UTF8而不是ASCII。:)好吧,从现在起我肯定会使用,但它不能解决问题。