NSMutableString *string = [[NSMutableString alloc]initWithString:
@"http%3A%2F%2Fsupport24hour.com%2Fworkplace2%2Fbuttler%2Fimage.php%3Fwidth%3D534%26height%3D256%26image%3Duploads%2Fdeals%2FdealImage%2Fdeal_1383005121_IGA+Logo.JPG"];
[string replaceOccurrencesOfString:@"+" withString:@" " options:NSCaseInsensitiveSearch range:NSMakeRange(0, [string length])];
NSURL * url = [NSURL URLWithString:[string stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
问问题
1408 次
3 回答
1
您不得对整个字符串进行百分比编码。相反,只有组件中的数据八位组可能必须被编码。
换句话说,URI 由由某些字符分隔的组件和子组件组成。这些字符被称为“保留字符”。不同组件的分隔符肯定不能包含在百分比编码中。
请注意,URL 的每个组件可能需要稍微不同的百分比编码。
另见RFC 3986。
编辑:
URL的一般结构如下:
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
以下两个示例直接从 RFC 复制而来,显示了它们的组成部分:
foo://example.com:8042/over/there?name=ferret#nose
\_/ \______________/\_________/ \_________/ \__/
| | | | |
scheme authority path query fragment
| _____________________|__
/ \ / \
urn:example:animal:ferret:nose
“查询组件”由“键/值”参数列表组成,其键和值由“=”分隔,其参数由“&”分隔。
查询组件是问号'?'
之后直到哈希字符的所有内容'#'
。
以下代码对参数的名称或值进行编码。注意参数必须用'&'分隔,名称和值必须用'='分隔。
static NSString* form_urlencode_rfc3986(NSString* s) {
CFStringRef charactersToLeaveUnescaped = CFSTR(" ");
//CFStringRef legalURLCharactersToBeEscaped = CFSTR("!$&'()+,/:;=?@~");
// Modified for urls (excluding '~'):
CFStringRef legalURLCharactersToBeEscaped = CFSTR("!$&'()+,/:;=?@");
NSString *result = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(
kCFAllocatorDefault,
(__bridge CFStringRef)s,
charactersToLeaveUnescaped,
legalURLCharactersToBeEscaped,
kCFStringEncodingUTF8));
return [result stringByReplacingOccurrencesOfString:@" " withString:@"+"];
}
于 2013-10-29T10:32:12.940 回答
1
我的一位同事遇到了同样的问题,请尝试下面的代码行。希望你的问题能得到解决
NSMutableString *string = [[NSMutableString alloc]initWithString:
@"http%3A%2F%2Fsupport24hour.com%2Fworkplace2%2Fbuttler%2Fimage.php%3Fwidth%3D534%26height%3D256%26image%3Duploads%2Fdeals%2FdealImage%2Fdeal_1383005121_IGA+Logo.JPG"];
string = [[NSMutableString alloc] initWithString:[[string stringByURLDecode] stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];
NSURL * url = [NSURL URLWithString:string];
NSLog(@"url = %@",url);
其中 stringByURLDecode 是用于解码 URL 的类别方法,它是这样的
- (NSString *)stringByURLDecode {
NSMutableString *tempStr = [NSMutableString stringWithString:self];
[tempStr replaceOccurrencesOfString:@"+" withString:@" " options:NSCaseInsensitiveSearch range:NSMakeRange(0, [tempStr length])];
return [[NSString stringWithFormat:@"%@",tempStr] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}
祝你好运(y)
于 2013-10-29T11:09:49.773 回答
0
嗯...在将字符串转换为 NSURL 之前打印出字符串怎么样?它看起来像你期望的那样吗?
另外:用空格替换“+”或者你真的想删除它吗?
于 2013-10-29T10:14:59.253 回答