Anh*_* Do 2 iphone nsurl uiwebview
说,我有一个地址栏,它是一个名为textField的UITextField,以及一个名为webView的UIWebView.大多数情况下,以下代码有效:
[webView loadURL:[NSURL URLWithString:textField.text]];
Run Code Online (Sandbox Code Playgroud)
当我输入一些带有特殊字符的长字符串时,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);})();
Run Code Online (Sandbox Code Playgroud)
根据这个答案,我可以stringByAddingPercentEscapesUsingEncoding用来逃避字符串,事实上它适用于这种情况.
我的问题是:在将字符串传递给webView之前始终调用是否安全stringByAddingPercentEscapesUsingEncoding:?以下是否有任何后果?
[webView loadURL:[NSURL URLWithString:[textField.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]]
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑:我的意思是'安全'是虽然这适用于包含Unicode字符的网址,但它仍适用于"普通"网址吗?
编辑2:如果这是'安全',为什么它不是默认行为?
由于我的问题没有其他答案,我决定使用以下- (NSURL *)URLValue方法而不是- (NSURL *)URLWithString:安全措施:
- (NSURL *)URLValue {
NSURL *URL = [NSURL URLWithString:self];
if (URL) return URL;
return [NSURL URLWithString:[self stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
}
Run Code Online (Sandbox Code Playgroud)