2012-04-12 22 views
8

में उद्धरण भागने मैं इस कोड स्निपेट का उपयोग कर रहा वर्ण एन्कोड करने के लिए एक पोस्ट अनुरोध के साथ अनुकूल होने के लिए:ऑब्जेक्टिव-सी

NSString *unescaped = [textField text]; 
    NSString *escapedString = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(
                        NULL, 
                        (__bridge_retained CFStringRef)unescaped, 
                        NULL, 
                        (CFStringRef)@"!*'();:@&=+$,/?%#[]", 
                        kCFStringEncodingUTF8); 

कौन सा अच्छा काम करता है, लेकिन भागने उद्धरण चिह्नों नहीं जोड़ता है: "

मैं आईओएस में कोटेशन अंक से कैसे बचूं?

उत्तर

15

मुझे लगता है मैं शब्द सवाल का सही ढंग से नहीं किया था।

मुझे [textField text] से उपयोगकर्ता को एनएसएसटींग इनपुट करने की आवश्यकता है और सुनिश्चित करें कि यदि स्ट्रिंग में उद्धरण चिह्न हैं, तो वे पोस्ट स्टेटमेंट भेजने के लिए ठीक से बच निकले हैं।

मेरे समाधान किया गया था:

unescaped = [unescaped stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""]; 

धन्यवाद

+1

NSRegularExpression की" escapedPatternForString: "क्लास विधि का उपयोग क्यों नहीं करें? – Manoj

0

\ का उपयोग कर "के बजाय का उपयोग कर" सीधे ...

उद्धरण, स्लैश और दूसरों की तरह विशेष वर्ण \ कि चरित्र अपनी विशेष कार्यक्षमता को दूर करने के बनाने के लिए आवश्यकता होती है की कोशिश करो।

1

उद्धरण \" से बचने के लिए हैं।

के रूप में:

(CFStringRef)@"I'm an \"example\"" 
+0

मैं यह जानता हूँ, मैं चाहता हूँ तुम कैसे एक उपयोगकर्ता इनपुट '" पाने के लिए 'और के लिए इसे बदल पता करने के लिए करने के लिए : '\" ' – Moe

3

पहले, आप एक CFStringRef करने के लिए अपने कलाकारों में __bridge_retained उपयोग करने के लिए नहीं करना चाहती। बस __bridge का उपयोग करें।

दूसरा, आपको स्ट्रिंग प्रतिस्थापन द्वारा मैन्युअल रूप से उद्धरणों से बचने की आवश्यकता नहीं है। CFURLCreateStringByAddingPercentEscapes() पर कॉल करते समय उद्धृत किए जाने वाले वर्णों के सेट में उद्धरण वर्ण जोड़ें। इसलिए जैसा:।

NSString *unescaped = [textField text]; 
NSString *escapedString = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, 
                        (__bridge CFStringRef)unescaped, 
                        NULL, 
                        CFSTR("!*'();:@&=+$,/?%#[]\""), 
                        kCFStringEncodingUTF8)); 

(सेट करने के लिए बोली जोड़ने के अलावा, मैं एक __bridge_transfer कलाकारों के बजाय CFBridgingRelease() उपयोग करने के लिए है क्योंकि मैं यह स्पष्ट लगता है बदल यह लग रहा है कि सब सीएफ "बनाएँ" कार्यों एक की जरूरत को संतुष्ट करता है इसी "रिलीज़"। इसके अलावा, मैं एक @"" शाब्दिक कलाकारों के उपयोग CFStringRef करने के लिए बदल सिर्फ एक CFSTR("") शाब्दिक।)