比方说,我有一个名为UITextField的地址栏,名为textField,还有一个名为webView的UIWebView。大多数情况下,以下代码可以工作:
[webView loadURL:[NSURL URLWithString:textField.text]];当我输入一些带有特殊字符的长字符串时,URLWithString:只返回null。Readability书签就是一个很好的例子:
javascript:(function(){readConvertLinksToFootnotes=true;readStyle='style-newspaper';readSize='size-medium';readMargin='margin-wide';_readability_script=document.createElement('script');_readability_script.type='text/javascript';_readability_script.src='http://lab.arc90.com/experiments/readability/js/readability.js?x='+(Math.random());document.documentElement.appendChild(_readability_script);_readability_css=document.createElement('link');_readability_css.rel='stylesheet';_readability_css.href='http://lab.arc90.com/experiments/readability/css/readability.css';_readability_css.type='text/css';_readability_css.media='all';document.documentElement.appendChild(_readability_css);_readability_print_css=document.createElement('link');_readability_print_css.rel='stylesheet';_readability_print_css.href='http://lab.arc90.com/experiments/readability/css/readability-print.css';_readability_print_css.media='print';_readability_print_css.type='text/css';document.getElementsByTagName('head')[0].appendChild(_readability_print_css);})();根据this answer,我可以使用stringByAddingPercentEscapesUsingEncoding来转义字符串,实际上,在这种情况下,它工作得很好。
我的问题是:在将字符串传递给stringByAddingPercentEscapesUsingEncoding:之前,总是调用 webView 安全吗?以下是否有任何后果?
[webView loadURL:[NSURL URLWithString:[textField.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]]谢谢!
编辑:我所说的“安全”的意思是,虽然它适用于包含Unicode字符的URL,但是它对“普通”URL仍然有效吗?
编辑2:如果这是‘安全’,为什么它不是默认行为?
发布于 2011-03-16 12:53:57
由于我的问题没有其他答案,所以我决定使用以下- (NSURL *)URLValue方法而不是- (NSURL *)URLWithString:作为一种安全度量:
- (NSURL *)URLValue {
NSURL *URL = [NSURL URLWithString:self];
if (URL) return URL;
return [NSURL URLWithString:[self stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
}发布于 2011-01-25 17:03:01
没问题。所有返回的对象都是自动释放的,因此不会泄漏。
https://stackoverflow.com/questions/4796507
复制相似问题