2009-04-01 11 views
23

में एम्परसैंड के साथ समस्या यूआरएल में हम एक स्ट्रिंग श्रीएक्स & श्री वाई कैसे पास करते हैं।आईफोन एसडीके: यूआरएल स्ट्रिंग

मैंने यह कोशिश की है लेकिन यह सभी चार्ज लेकिन एम्परसेंड करता है।

[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 

सहायता के लिए धन्यवाद।

उत्तर

-2

एक यूआरएल में, एम्परसैंड एक संरक्षित कीवर्ड है जो क्वेरीस्ट्रिंग वैरिएबल को शामिल करने का संकेत देता है। आप इसे मूल्य के हिस्से के रूप में नहीं डाल सकते हैं। आपको इसे किसी और चीज़ में बदलने की जरूरत है। यूआरएल भागने के रूप में ASP.Net URLEncode Ampersand for use in Query String

+0

यह ठीक (लिंक पर) सही जवाब है:

यहाँ एक सरल समाधान है। –

+5

... इसे गलत ढांचे के लिए छोड़कर। आईफोन पर नहीं .NET। –

4

उपयोग% 26:

यहाँ एक ही सवाल StackOverflow पर पूछे गए एक कड़ी है।

अन्य पलायन:

$ %24 
& %26 
+ %2B 
, %2C 
/%2F 
: %3A 
; %3B 
= %3D 
? %3F 
@ %40 
+0

तो अगर मैं निम्न कार्य कर रहा हूँ मैं सही [statusTextField.text stringByReplacingOccurrencesOfString: @ "और" withString: @ "% 26"] और मेरे सर्वर साइड पर मैं के साथ और और DB में दुकान% 26 की जगह। –

31

-stringByAddingPercentEscapesUsingEncoding: पूरा भागने एन्कोडिंग प्रदर्शन नहीं करता। आपको -replaceOccurrencesOfString:withString:

का उपयोग करके एन्कोडिंग मैन्युअल रूप से जोड़ना चाहिए, मूल रूप से https://devforums.apple.com/message/15674#15674 पर सुझाए गए अनुसार पूरी सूची (गेमकैट की सूची मिररिंग) है। चूंकि निक बताते हैं, यह महंगा है इसलिए बचने के लिए अपनी वास्तविक आवश्यकताओं पर विचार किए बिना पूरी सूची शामिल न करें।

NSMutableString *escaped = [actionString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
[escaped replaceOccurrencesOfString:@"$" withString:@"%24" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"&" withString:@"%26" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"+" withString:@"%2B" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"," withString:@"%2C" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"/" withString:@"%2F" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@":" withString:@"%3A" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@";" withString:@"%3B" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"=" withString:@"%3D" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"?" withString:@"%3F" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"@" withString:@"%40" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@" " withString:@"%20" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"\t" withString:@"%09" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"#" withString:@"%23" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"<" withString:@"%3C" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@">" withString:@"%3E" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"\"" withString:@"%22" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"\n" withString:@"%0A" options:NSCaseInsensitiveSearch range:wholeString]; 

यह कोड निश्चित रूप से आपके यूआरएल का हैश बनाता है।

+8

मेरा मानना ​​है कि उचित कोड NSMutableString * से बच जाएगा = [NSMutableString stringWithString: [actionString ...]]; और एनएसएमकेरेंज (0, [बच निकला]]] पूरे स्ट्रिंग के बजाय। – kolinko

+0

मेरा दिन बनाएं .. धन्यवाद –

+1

यह काफी महंगा है, CFURLCreateStringByAddingPercentEscapes() बेहतर है। –

36

या भी कम:

@implementation NSString (Escaping) 
- (NSString*)stringWithPercentEscape {    
    return [(NSString *) CFURLCreateStringByAddingPercentEscapes(
     NULL, 
     (CFStringRef)[[self mutableCopy] autorelease], 
     NULL, 
     CFSTR("=,!$&'()*+;@?\n\"<>#\t :/"), 
     kCFStringEncodingUTF8) autorelease]; 
} 
@end 

और यहाँ यह एक एआरसी अनुरूप इनलाइन समारोह सहायक के रूप में फिर से है:

#if __has_feature(objc_arc) 
static inline NSString *hxURLEscape(NSString *v) { 
    static CFStringRef _hxURLEscapeChars = CFSTR("=,!$&'()*+;@?\r\n\"<>#\t :/"); 
    return ((__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(
     NULL, 
     (__bridge CFStringRef)[v mutableCopy], 
     NULL, 
     _hxURLEscapeChars, 
     kCFStringEncodingUTF8)); 
} 
#endif 
+2

छोटा और डरावना :) – bentford

+0

कृपया रोजर का उत्तर नीचे देखें। हालांकि यह समाधान एक अच्छा सामान्य उत्तर है, यह आईओएस संस्करण 2.2 के रूप में एक पूर्ण यूआरएल एन्कोडिंग कार्यान्वयन नहीं है। अगर किसी के पास बाद में आईओएस रिलीज में तय किए जाने के बारे में कोई अतिरिक्त जानकारी है, तो कृपया यहां टिप्पणी करें। – memmons

+1

आप इसे क्यों बदल सकते हैं? – user102008

0

stringByAddingPercentEscapesUsingEncoding भी + साथ ठीक से काम नहीं करता है।

[[[urlString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding] stringByReplacingOccurrencesOfString:@"&" withString:@"%26"] stringByReplacingOccurrencesOfString:@"+" withString:@"%2b"];