【问题标题】:NSURL - Correct Encoding for parametersNSURL - 参数的正确编码
【发布时间】:2015-02-11 06:37:27
【问题描述】:

在我的代码中,如果字符串在参数中包含一些特殊字符&,我需要从NSString 编码NSURL

例如:NSString* urlText = @"70.84.58.40/projects/igolf/?TipThumb=GOLF & 58B.jpg&query=some";

使用stringByAddingPercentEscapesUsingEncoding不会编码&,这将被视为url中的一些其他查询。 那么,在这种情况下,从NSString 编码NSURL 的正确格式是什么。

【问题讨论】:

标签: ios iphone nsurl nsstringencoding


【解决方案1】:

您可以使用此静态辅助方法为 URL 编码字符串:

+ (NSString*)urlEncode:(NSString*)encodingString
{
    return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,
       (CFStringRef)encodingString,
       NULL,
       (CFStringRef)@" ",
       CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)));
}

【讨论】:

    【解决方案2】:

    你可以在 NSString 上创建 Category 来绕过这个问题,试试这个 link 提供解决方案的地方。这是帖子中的示例代码

    #import <Foundation/Foundation.h>
    @interface NSString (URLEncoding)
    -(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding;
    @end
    

    下面是实现:

    #import "NSString+URLEncoding.h"
    @implementation NSString (URLEncoding)
    -(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding {
        return (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
                   (CFStringRef)self,
                   NULL,
                   (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
                   CFStringConvertNSStringEncodingToEncoding(encoding));
    }
    @end
    

    现在我们可以简单地这样做了:

    NSString *raw = @"GOLF & 58B.jpg&query=some";
    NSString *url = [NSString stringWithFormat:@"70.84.58.40/projects/igolf/?TipThumb=%@",
                [raw urlEncodeUsingEncoding:NSUTF8Encoding]];
    

    【讨论】:

      猜你喜欢
      • 2013-09-11
      • 2011-02-19
      • 2014-06-26
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 2021-07-26
      • 2023-03-24
      相关资源
      最近更新 更多