繁体   English   中英

具有非字母字符的Objective-C NSURL

[英]Objective-C NSURL With Non-Alphabetical Characters

我正在尝试创建带有特殊字符(例如““,” |“,”-“,”:“等)的NSURL。如果我的字符串中包含任何这些字符,则NSURL不会初始化。 如何使用这些字符创建NSURL? 以下内容不起作用:

NSURL *url = [[NSURL alloc] initWithString:@"http://google.com?id=|test|"]; //if i remove the | it works. 

问题描述

来自[NSURL initWithString]的文档

使用提供的URL字符串初始化NSURL对象。

-(id)initWithString:(NSString *)URLString

参数-URLString

用于初始化NSURL对象的URL字符串。 此URL字符串必须符合RFC 2396中所述的URL格式,并且不能为nil。 此方法根据RFC 1738和1808解析URLString。

返回值

使用URLString初始化的NSURL对象。 如果URL字符串格式错误,则返回nil。

讨论区

此方法期望URLString仅包含格式正确的URL中允许的字符。 所有其他字符必须正确转义。 任何使用百分比转义的字符都使用UTF-8编码进行解释。

您需要先将字符串编码为url。 解决方案之一是使用[NSString stringByAddingPercentEscapesUsingEncoding:] [1]

关于Stackoverflow还有关于将字符串编码为url的其他讨论:

  1. iOS:如何进行正确的URL编码?
  2. 我如何URL编码字符串

您应该使用ASCII值“ |” :ie%7C。 您不能直接使用这些类型的特殊字符。

    NSURL *url = [[NSURL alloc] initWithString:@"http://google.com?id=%7Ctest%7C"];

我希望它能起作用。

它不起作用的原因是因为这些字符不是URL的直接合法字符。

摘自对(实际上)相关问题的出色回答:关于SO的问题: 哪些字符使URL无效?

“一般来说,由RFC 3986 (请参阅第2节:字符 )定义的URL可以包含以下任意字符:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 -._〜:/?#[] @!$&'()* +,; =。其他任何其他字符。字符需要使用百分比编码(%hh)进行编码。URI的每个部分对于需要用百分比编码的单词表示哪些字符都有进一步的限制。”

但是在实践中,您不应该真正在URL中使用逗号,方括号或时髦的内容-您不知道哪个浏览器会正确处理它。 绝对没有充分的理由在URL中使用任何时髦的字符-即使它是本地文件的URL。

是的,对于Objective-C,使用NSURL URLWithString是更好的策略,但是主要要做的是坚持URL的原则。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM