我正在尝试创建一个带有特殊字符的NSURL,如“”,“|”,“ - ”,“:”等。如果我的字符串中有任何这些字符,则NSURL不会初始化。如何使用这些字符创建NSURL?以下不起作用:
NSURL *url = [[NSURL alloc] initWithString:@"http://google.com?id=|test|"]; //if i remove the | it works.
答案 0 :(得分:8)
使用提供的URL字符串初始化NSURL对象。
- (id)initWithString:(NSString *)URLString
参数 - URLString
用于初始化NSURL对象的URL字符串。 此网址 string必须符合RFC 2396中描述的URL格式,并且必须符合 不是nil。此方法根据RFC 1738和。解析URLString 1808.
返回值
使用URLString初始化的NSURL对象。如果URL字符串是 格式错误,返回无。
讨论
此方法要求URLString仅包含字符 允许在正确形成的URL中。所有其他角色必须是 正确的百分比转义。任何转义百分比的字符都是 使用UTF-8编码解释。
您需要先将字符串编码为url。其中一个解决方案就是使用 [NSString stringByAddingPercentEscapesUsingEncoding:] [1]
关于将字符串编码为url的Stackoverflow还有其他讨论:
答案 1 :(得分:3)
你应该使用ASCII值“|” :即%7C。您无法直接使用这些类型的特殊字符。
NSURL *url = [[NSURL alloc] initWithString:@"http://google.com?id=%7Ctest%7C"];
我希望它能奏效。
答案 2 :(得分:2)
它不起作用的原因是因为它们不是URL的直接合法字符。
这取自对(实际上)关于SO的相关问题的精彩答案:Which characters make a URL invalid?
“通常由RFC 3986定义的网址(请参阅Section 2: Characters)可能包含以下任何字符:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 -._〜:/?#[] @!$&'() *,;; =。任何其他字符都需要使用百分比编码(%hh)进行编码.URI的每个部分都有进一步限制,需要用百分比编码的字来表示哪些字符。“
然而在实践中,你不应该在URL中使用逗号或方括号或时髦的东西 - 你不知道哪些浏览器会正确处理它。绝对没有充分的理由在URL中使用任何时髦的字符 - 即使它是本地文件的URL。
是的,使用NSURL URLWithString
对Objective-C来说是一个更好的策略,但主要做的是坚持使用URL的注意事项。