如何编码网址

Cha*_* SP 1 iphone url objective-c

NSString* urlEncode(NSString * url)
{
    string inStr = StringFromNSString(url);
    CFStringRef inStringRef = CFStringCreateWithCString( kCFAllocatorDefault, inStr.c_str(), kCFStringEncodingUTF8 );
    NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)inStringRef,NULL,(CFStringRef)@"!*’();:@&=+$,/?%#[]",kCFStringEncodingUTF8 );
    return encodedString;
}
Run Code Online (Sandbox Code Playgroud)

我使用上面的方法来编码网址...即使我的应用程序崩溃说

<body>
    <div id="content">
        <h1>An Error Was Encountered</h1>
        <p>The URI you submitted has disallowed characters.</p> </div>
</body>
</html>
terminate called after throwing an instance of 'std::invalid_argument'
  what(): 
Run Code Online (Sandbox Code Playgroud)

任何想法..我的代码有什么问题?

仅供参考:它在这个方法中崩溃JSONNode jsonObject0 = libJSON :: parse(inResponseData);

更新:我发送消息的服务器是UNIX服务器是否导致问题?

dar*_*all 5

您不需要创建inStrinStringRef临时变量.类型NSString*CFStringRef是"免费桥梁"类型.这些类型只需简单的演员即可互换.

您可以在此处找到有关免费桥接的更多信息:http://www.mikeash.com/pyblog/friday-qa-2010-01-22-toll-free-bridging-internals.html

也就是说,您可以将方法简化为以下内容:

-(NSString*) urlEncode
{
    NSString *encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes( NULL, (CFStringRef)self, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8 );
    return [encodedString autorelease];
}
Run Code Online (Sandbox Code Playgroud)

以上最好作为NSString类实现(注意使用selfas作为编码值).