2

比如说,我有一个地址栏,它是一个名为 textField 的 UITextField 和一个名为 webView 的 UIWebView。大多数情况下,以下代码有效:

[webView loadURL:[NSURL URLWithString:textField.text]];

当我输入一些带有特殊字符的长字符串时,URLWithString:只需返回null. 可读性小书签就是一个很好的例子:

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);})();

根据这个答案,我可以stringByAddingPercentEscapesUsingEncoding用来转义字符串,并且确实适用于这种情况。

我的问题是:在将字符串传递给 webView 之前总是调用它是否安全?stringByAddingPercentEscapesUsingEncoding:以下是否有任何后果?

[webView loadURL:[NSURL URLWithString:[textField.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]]

谢谢!

编辑:我所说的“安全”的意思是,虽然这适用于包含 Unicode 字符的 URL,但它仍然适用于“普通”URL 吗?

编辑 2:如果这是“安全的”,为什么它不是默认行为?

4

2 回答 2

5

由于我的问题没有其他答案,我决定使用以下- (NSURL *)URLValue方法而不是- (NSURL *)URLWithString:作为安全措施:

- (NSURL *)URLValue {
    NSURL *URL = [NSURL URLWithString:self];

    if (URL) return URL;

    return [NSURL URLWithString:[self stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
}
于 2011-03-16T12:53:57.017 回答
0

没问题。所有返回的对象都是自动释放的,所以没有泄漏。

于 2011-01-25T17:03:01.447 回答