【问题标题】:NSString method to percent escape '&' for URLNSString 方法为 URL 百分比转义“&”
【发布时间】:2010-01-29 01:37:41
【问题描述】:

哪种 NSString 编码方法可以将 & 符号 (&) 正确地转义为 %26

stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding

获取空格 (%20) 和其他坏人,但忽略 & 符号!?!

【问题讨论】:

  • 与号是 URL 中的有效字符。 www.example.com?a=5&b=7
  • 我知道..但它弄乱了我的查询参数,因此需要在添加到查询字符串之前“删除”值中出现的 &..

标签: cocoa-touch encoding nsstring


【解决方案1】:

该方法不会处理与符号,因为它们是 URL 中的合法字符。在此调用之前,您可能应该零碎地预处理特别有问题的部分。

【讨论】:

    【解决方案2】:

    这是从Bagonca blog 获取的一个很好的解决方案,用于对您的 NSStrings 进行 url 编码:

    + (NSString *)urlEncodeValue:(NSString *)str
    {
       NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)str, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8);
       return [result autorelease];
    }
    

    添加 CFBridgingRelease( 以获得 ARC 兼容性。

    + (NSString *)urlEncodeValue:(NSString *)str
    {
        NSString *result = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)str, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8));
        return result;
    }
    

    【讨论】:

    • 这解决了我的问题。很难找到答案,因为我不知道原因是我的 POST 正文中的字符。这似乎是由于我的文件的大小。如果您正在发送 sendAsynchronousRequest 并且请求终止了有效负载,请检查编码。谢谢。
    【解决方案3】:

    我认为接受的答案不太正确,您需要在 调用 addPercentEscapesAndReplaceAmpersand 之后处理字符串

    + (NSString *) addPercentEscapesAndReplaceAmpersand: (NSString *) stringToEncode
    {
        NSString *encodedString = [stringToEncode stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; 
        return [encodedString stringByReplacingOccurrencesOfString: @"&" withString: @"%26"];
    }
    

    【讨论】:

    • 是的,但这会破坏头韵!
    • 这也不对,如果你构建一个像 ?foo=bar&bar=foo 这样的查询字符串,然后用 %26 替换所有 &s,它就不再是一个有效的查询字符串了。
    • 您可能希望处理 bar 和 foo 值而不是整个查询字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多