2012-02-08 9 views
8

में एन्कोड नहीं करेगा, मैं गंभीरता से यहां एक मस्तिष्क का फट कर रहा हूं, लेकिन मैं यह नहीं समझ सकता कि यह मेरे जीवन के लिए एन्कोडिंग क्यों नहीं कर रहा है। पूरी तरह से खोज रहे थे, और मैं कोड नमूने एन्कोड करने के लिए भी नहीं मिल सकता है। कोई विचार?स्ट्रिंग आईओएस

NSString *searchString = @"waffl&es"; 

NSString *encodedSearchString = [searchString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString *urlString = [NSString stringWithFormat:@"http://en.wikipedia.org/?search=%@", encodedSearchString]; 
NSURL *url = [NSURL URLWithString:urlString]; 

उत्तर

24

भविष्य में संदर्भ के लिए, यह है कि मैं क्या काम करने के लिए मिल गया है (यानी ठीक से सब कुछ सांकेतिक शब्दों में बदलना)

+ (NSString*)encodeURL:(NSString *)string 
{ 
    NSString *newString = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)); 

    if (newString) 
    { 
     return newString; 
    } 

    return @""; 
} 
+2

किसी को भी समझ में क्यों? यह बहुत अच्छी तरह से काम करता है, लेकिन क्यों stringByAddingPercentEscapesUsingEncoding: कभी-कभी नहीं होता है? –

+4

ब्रिजिंग कास्ट आप इस उत्तर में उपयोग कर रहे हैं गलत है, और मेमोरी रिसाव का कारण बन जाएगा। परिणाम के लिए आपको '__bridge_transfer' का उपयोग करना चाहिए। अधिक जानकारी के लिए यह प्रश्न देखें: http://stackoverflow.com/questions/6822473/correct-bridging-for-arc –

+0

@CarlosRicardo stringByAddingPercentEscapesUsingEncoding: केवल उन वर्णों से बचने का इरादा है जो कानूनी URL वर्ण नहीं हैं। "&" एक कानूनी यूआरएल चरित्र है, इसलिए यह बच नहीं गया है। यदि आप एक क्वेरी पैरामीटर में "&" शामिल करना चाहते हैं, तो आपको यह सुनिश्चित करने के लिए इस कोड का उपयोग करने की आवश्यकता है कि यह भाग जाए। – bugloaf