我无法打开URL,UIWebView因此我已经进行了搜索并发现我需要对URL进行编码,因此我尝试对其进行编码,但是我在URL编码方面遇到了问题:我的网址是http://somedomain.com/data/Témp%20Page%20-%20Open.html(它不是真正的网址).
我很担心%20,我试着用替换stringByReplacingOccuranceOfString:@"" withString:@"",它给我我想要像URL http://somedomain.com/data/Témp Page - Open.html但它不是开放的UIWebView,但令人惊讶它在打开Safari和FireFox完善.即使我打开未编码的URL,它也会自动转换并打开我正在寻找的页面.
我已经谷歌进行URL编码了,它指出了我已经检查过的不同结果,但没有结果帮助我!我在不同的URL编码问题中尝试了不同的函数答案,但它只是更改了所有特殊字符并使我的URL像在一起,甚至在任何浏览器中http%3A%2F%2Fsomedomain.com%2Fdata%2FT...都无法打开UIWebView.
它提供了以下Error Log的UIWebView delegate
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { }
Run Code Online (Sandbox Code Playgroud)
错误代码:101&描述:错误域= WebKitErrorDomain代码= 101"操作无法完成.(WebKitErrorDomain错误101.)"UserInfo = 0x6e4cf60 {}
小智 16
@Dhaval Vaishnani提供的答案只是部分正确.这种方法对待?,=且&字符不进行编码,因为他们在一个URL有效.因此,要编码任意字符串以安全地用作URL的一部分,您不能使用此方法.相反,你必须回到使用CoreFoundation和CFURLRef:
NSString *unsafeString = @"this &string= confuses ? the InTeRwEbZ";
CFStringRef safeString = CFURLCreateStringByAddingPercentEscapes (
NULL,
(CFStringRef)unsafeString,
NULL,
CFSTR("/%&=?$#+-~@<>|\\*,.()[]{}^!"),
kCFStringEncodingUTF8
);
Run Code Online (Sandbox Code Playgroud)
不要忘记使用处理结果字符串的所有权CFRelease(safeString);.
此外,似乎尽管标题,OP正在寻找解码而不是编码 字符串.CFURLRef有另一个类似的函数调用用于:
NSString *escapedString = @"%32%65BCDEFGH";
CFStringRef unescapedString = CFURLCreateStringByReplacingPercentEscapesUsingEncoding (
NULL,
(CFStringRef)escapedString,
CFSTR(""),
kCFStringEncodingUTF8
);
Run Code Online (Sandbox Code Playgroud)
再次,不要忘记适当的内存管理.
Mat*_*man 14
我做了一些测试,我认为问题不是真的与UIWebView但是NSURL因为"Témp"中的é没有正确编码而不接受URL.这将导致+[NSURLRequest requestWithURL:]并-[NSURL URLWithString:]返回,nil因为字符串包含格式错误的URL.我猜你最后会使用一个不好的nil请求-[UIViewWeb loadRequest:].
例:
NSLog(@"URL with é: %@", [NSURL URLWithString:@"http://host/Témp"]);
NSLog(@"URL with encoded é: %@", [NSURL URLWithString:@"http://host/T%C3%A9mp"]);
Run Code Online (Sandbox Code Playgroud)
输出:
2012-10-02 12:02:56.366 test[73164:c07] URL with é: (null)
2012-10-02 12:02:56.368 test[73164:c07] URL with encoded é: http://host/T%C3%A9mp
Run Code Online (Sandbox Code Playgroud)
如果你真的想借用WebKit所具有的格式错误的URL的优雅处理而不想自己实现它,你可以做这样的事情,但它非常难看:
UIWebView *webView = [[[UIWebView alloc]
initWithFrame:self.view.frame]
autorelease];
NSString *url = @"http://www.httpdump.com/texis/browserinfo/Témp.html";
[webView loadHTMLString:[NSString stringWithFormat:
@"<script>window.location=%@;</script>",
[[[NSString alloc]
initWithData:[NSJSONSerialization
dataWithJSONObject:url
options:NSJSONReadingAllowFragments
error:NULL]
encoding:NSUTF8StringEncoding]
autorelease]]
baseURL:nil];
Run Code Online (Sandbox Code Playgroud)
小智 13
最直接的方法是使用:
NSString *encodedString = [rawString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)
iDhaval很接近,但他反过来做(解码而不是编码).
Anand的方式可行,但你很可能不得不替换空格和换行符.请参阅此处的参考资料:http: //en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters
希望有所帮助.
在iPhone中对URL进行编码非常简单.它如下
NSString* strURL = @"http://somedomain.com/data/Témp Page - Open.html";
NSURL* url = [NSURL URLWithString:[strURL stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
Run Code Online (Sandbox Code Playgroud)
这是对URL进行编码的完美方式,我正在使用它,它完全适合我.
希望它能帮到你!!!
| 归档时间: |
|
| 查看次数: |
44567 次 |
| 最近记录: |