2011-01-27 1 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をエンコードする方法の上に使用していたURL

FYI:このメソッドでクラッシュしています。JSONNode jsonObject0 = libJSON :: parse(inResponseData);

UPDATED:メッセージを送信しているサーバーがUNIXサーバーで問題を起こしていますか?

+0

.. – reflog

答えて

1

UNIXサーバーで問題でした...間違ったデータを提供していました。

2

これは私にとって問題ありません。私が代わりにCFSTR(CFStringRef)を使用@ "* '();:!@ & = + $、/%#[]?"

​​
5

あなたはinStrまたはinStringRef一時変数を作成する必要はありません。 NSString*およびCFStringRefのタイプは、「フリーダイヤルブリッジ」タイプです。これらのタイプは、単純なキャストと互換性があります。

現在フリーダイヤルブリッジの詳細については見つけることができます:http://www.mikeash.com/pyblog/friday-qa-2010-01-22-toll-free-bridging-internals.html

あなただけの次にあなたの方法を簡素化することができ、言った:上記の最高のNSStringのカテゴリとして実装されている

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

を(エンコードする値としてselfの使用に注意してください)。

1

必要以上にURLをエンコードしていないことを確認する必要があります。このエンコーディング文字列を実際のURLの一部として使用する場合は、エンコードされるはずのURLの部分だけがあることを知っておく必要があります。つまり、クエリ文字列(他のビットもありますが95%の時間、これはクエリと関係しています)。

言い換えれば、あなたのURLは次のようになります。

この中
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]]; 

代わりのそれとして下記の使用いくつかのメモリ管理の問題があります。あなたが送信している実際のURLが参考になる提供

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