无法从NSString创buildNSUrl总是得到零
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]];
我的同事面临同样的问题,尝试下面的代码行。 希望你的问题将得到解决
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)
您不得百分比编码整个string。 相反,只有组件中的数据字节必须被编码。
换句话说,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:@"+"]; }
嗯…在把它变成NSURL之前打印出string呢? 它看起来像你所期望的那样吗?
另外:用空格replace“+”,或者你真的想删除它吗?
- NSAttributedStringalignment不能在html内容上工作
- Firebase Auth UI如何处理重新认证?
- button不能正确显示在iPhone模拟器在Xcode 4.6.2
- Swift – 自定义MKAnnotationView,设置标签标题
- 适用于iOS 10 XCode 8.1 Swift 3.0的NavigationBar背景图片
- iPhone6(无显示缩放模式)UIMenuController被截断
- 警告:尝试使用SLComposeViewController将不在窗口层次结构中的*视为*
- 如何使用Xcode 4.2使用ios 4.2 base sdk?
- moveRowAtIndexPath没有删除button