2011-01-27 65 views
1
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; 
} 

我使用上面的方法來編碼網址...即使我的應用程序崩潰說如何編碼URL

<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(): 

任何想法。什麼是錯我的代碼? JSONNode jsonObject0 = libJSON :: parse(inResponseData);這個方法在這個方法中崩潰了。

已更新:我發送消息的服務器是UNIX服務器是否導致問題?

+0

提供您發送的實際URL會很有幫助.. – reflog 2011-01-27 10:17:15

回答

1

這是UNIX服務器的問題......它給出了錯誤的數據。

2

這對我來說很好。我用CFSTR代替(CFStringRef)@ 「*」();:!@ & = + $,/#%[]?「

​​
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]; 
} 

以上作爲一個NSString類是最好的實現(注意使用self作爲編碼的值)。

1

您需要確保您的URL編碼不是您需要的。如果您打算將此編碼字符串用作實際URL的一部分,那麼您應該知道只有部分URL應該被編碼,即查詢字符串(還有其他位,但是95%的時間,這與查詢有關)。

換句話說,您的網址應該是:

scheme://host/path?<key>=<value>&<key>=<value> 

在此,ONLY東西尖括號(<key><value>)裏面應該是URL編碼。

1
NSString *encodedstring = (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, 
                          (__bridge CFStringRef)yoururlstring, 
                          NULL, 
                         (CFStringRef)@"!*'();:@&=+$,/?%#[]", 
                         kCFStringEncodingUTF8); 

此代碼的工作完美

2

你可以試試這個

NSString *sampleUrl = @"http://www.google.com/search.jsp?params=Java Developer"; 
NSString* encodedUrl = [sampleUrl stringByAddingPercentEscapesUsingEncoding: 
NSASCIIStringEncoding]; 
0

這裏是編碼格式URLString的最佳方式:

urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; 

而是下面使用,因爲它的有一些內存管理問題。

NSString *encodedstring = (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, 
                         (__bridge CFStringRef)yoururlstring, 
                         NULL, 
                        (CFStringRef)@"!*'();:@&=+$,/?%#[]", 
                        kCFStringEncodingUTF8);