【问题标题】:Objective-C NSURL With Non-Alphabetical Characters具有非字母字符的 Objective-C NSURL
【发布时间】:2014-06-07 06:55:13
【问题描述】:

我正在尝试使用“”、“|”、“-”、“:”等特殊字符创建一个 NSURL。如果我的字符串中有任何这些字符,则 NSURL 不会初始化。我该怎么做才能用这些字符创建一个 NSURL?以下方法不起作用:

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

【问题讨论】:

    标签: ios objective-c xcode nsurl non-ascii-characters


    【解决方案1】:

    问题描述

    来自[NSURL initWithString]的文档

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

    - (id)initWithString:(NSString *)URLString

    参数 - URLString

    用来初始化 NSURL 对象的 URL 字符串。 此网址 字符串必须符合 RFC 2396 中描述的 URL 格式,并且必须 不为零。此方法根据 RFC 1738 解析 URLString 和 1808.

    返回值

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

    讨论

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

    解决方案

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

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

    1. iOS : How to do proper URL encoding?
    2. How do I URL encode a string

    【讨论】:

      【解决方案2】:

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

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

      我希望它会起作用。

      【讨论】:

      • 您还可以做一件事,您可以将这些特殊字符与 UTF-8 编码一起使用。
      【解决方案3】:

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

      这是对 SO 上一个(实际上)相关问题的精彩回答:Which characters make a URL invalid?

      “一般而言,RFC 3986(参见Section 2: Characters)定义的 URL 可能包含以下任何字符:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;= . 任何其他字符都需要使用百分比编码 (%hh) 进行编码。URI 的每个部分对哪些字符需要用百分比编码的单词表示都有进一步的限制。"

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

      是的,使用NSURL URLWithString 对 Objective-C 来说是一个更好的策略,但主要要做的是坚持 URL 的注意事项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-21
        • 2016-05-22
        • 1970-01-01
        • 2020-06-30
        • 1970-01-01
        • 1970-01-01
        • 2015-02-26
        • 2021-05-17
        相关资源
        最近更新 更多