我有一个这样的NSString
:
http://www.
但我想将其转换为:
http%3A%2F%2Fwww.
我该怎么做呢?
发布于 2011-11-11 05:35:39
它被称为URL encoding。更多here。
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding {
return (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)self,
NULL,
(CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
CFStringConvertNSStringEncodingToEncoding(encoding));
}
发布于 2012-10-17 13:43:11
这不是我的解决方案。别人用stackoverflow写的,但我忘了是怎么写的。
不知何故,这个解决方案工作得“很好”。它可以处理发音符号、中文字符以及几乎任何其他字符。
- (NSString *) URLEncodedString {
NSMutableString * output = [NSMutableString string];
const char * source = [self UTF8String];
int sourceLen = strlen(source);
for (int i = 0; i < sourceLen; ++i) {
const unsigned char thisChar = (const unsigned char)source[i];
if (false && thisChar == ' '){
[output appendString:@"+"];
} else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' ||
(thisChar >= 'a' && thisChar <= 'z') ||
(thisChar >= 'A' && thisChar <= 'Z') ||
(thisChar >= '0' && thisChar <= '9')) {
[output appendFormat:@"%c", thisChar];
} else {
[output appendFormat:@"%%%02X", thisChar];
}
}
return output;
}
如果有人能告诉我这段代码是谁写的,我将不胜感激。基本上,他有一些解释,为什么这个编码的字符串将完全按照它所希望的那样解码。
我对他的解决方案做了一点修改。我喜欢用%20而不是+表示空格。就这样。
发布于 2012-08-30 20:02:11
NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(NUL,(CFStringRef)@"parameter",NULL,(CFStringRef)@"!*'();@&+$,/?%#[]~=_-.:",kCFStringEncodingUTF8 );
NSURL * url = [[NSURL alloc] initWithString:[@"address here" stringByAppendingFormat:@"?cid=%@",encodedString, nil]];
https://stackoverflow.com/questions/8086584
复制相似问题