首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[NSURL URLWithString:stringContainingSpecialCharacters]

[NSURL URLWithString:stringContainingSpecialCharacters]
EN

Stack Overflow用户
提问于 2011-01-25 16:59:42
回答 2查看 2.7K关注 0票数 2

比方说,我有一个名为UITextField的地址栏,名为textField,还有一个名为webView的UIWebView。大多数情况下,以下代码可以工作:

代码语言:javascript
复制
[webView loadURL:[NSURL URLWithString:textField.text]];

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

代码语言:javascript
复制
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 安全吗?以下是否有任何后果?

代码语言:javascript
复制
[webView loadURL:[NSURL URLWithString:[textField.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]]

谢谢!

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-16 12:53:57

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

代码语言:javascript
复制
- (NSURL *)URLValue {
    NSURL *URL = [NSURL URLWithString:self];

    if (URL) return URL;

    return [NSURL URLWithString:[self stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
}
票数 5
EN

Stack Overflow用户

发布于 2011-01-25 17:03:01

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4796507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档