2009-11-03 22 views
9

क्या एचटीएमएल और यूआरएल को एन्कोड/डीकोड करने का तरीका है (एक्सकोड में, उद्देश्य-सी का उपयोग करके)?यूआरएल-एन्कोडिंग और एचटीएमएल-एन्कोडिंग एनएसएसआरिंग्स

[NSString stringWithContentsOfFile:<#(NSString *)path#> encoding:<#(NSStringEncoding)enc#> error:<#(NSError **)error#>] 

ऐसा लगता है कि मैं कैसे उम्मीद करता हूं। मैंने सोचा कि यह इस मामले में "<" समकक्ष HTML इकाइयों जैसे "<" जैसे विशेष वर्णों को परिवर्तित करेगा।

HTML URL Encoding Reference

HTML Entities Reference

प्रत्याशा में धन्यवाद:

यहाँ इस विषय (सामान्य) से संबंधित w3school लिंक के लिए एक संदर्भ है।

उत्तर

19

रिसीवर को एक कानूनी यूआरएल स्ट्रिंग में बदलने के लिए जरूरी प्रतिशत से बचने के लिए दिए गए एन्कोडिंग का उपयोग करके रिसीवर का प्रतिनिधित्व देता है।

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding 

और

एक नया रिसीवर सब प्रतिशत मिलान पात्रों के रूप में दिए गए एन्कोडिंग द्वारा निर्धारित के साथ निकल जाता है में जगह द्वारा किए गए स्ट्रिंग देता है।

- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding 
+1

एक्सएमएल (यानी, इकाई प्रतिस्थापन और <से <) –

11

विधि आप का हवाला देते हैं एक (जैसे UTF-8 या ASCII के रूप में) किसी दिए गए वर्ण एन्कोडिंग के साथ डिस्क से फ़ाइल पढ़ता है। इसका यूआरएल या एचटीएमएल से बचने के लिए कुछ लेना देना नहीं है।

[myString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 

सुनिश्चित करें कि आप इस विधि के बारे दस्तावेज़ पढ़ें, यह क्या बच निकलता है और क्या इसे अकेले छोड़ देता है के बारे में कुछ बारीकियों देखते हैं क्योंकि बनाओ:

आप URL प्रतिशत पलायन जोड़ना चाहते हैं, तो आप इस विधि चाहते हैं। कुछ मामलों में, आपको अधिक जटिल, लेकिन अधिक लचीला, CFURLCreateStringByAddingPercentEscapes() का उपयोग करना पड़ सकता है। (यदि आप करते हैं, ध्यान दें कि आप NSString * को CFStringRef डाली और इसके विपरीत कर सकते हैं।)

है कि मैं के बारे में पता बचने XML/HTML शैली इकाई करने के लिए बनाया गया कुछ भी नहीं है, लेकिन इस समारोह चाहिए मूल बातें संभाल करने:

NSString * convertToXMLEntities(NSString * myString) { 
    NSMutableString * temp = [myString mutableCopy]; 

    [temp replaceOccurrencesOfString:@"&" 
          withString:@"&amp;" 
          options:0 
           range:NSMakeRange(0, [temp length])]; 
    [temp replaceOccurrencesOfString:@"<" 
          withString:@"&lt;" 
          options:0 
           range:NSMakeRange(0, [temp length])]; 
    [temp replaceOccurrencesOfString:@">" 
          withString:@"&gt;" 
          options:0 
           range:NSMakeRange(0, [temp length])]; 
    [temp replaceOccurrencesOfString:@"\"" 
          withString:@"&quot;" 
          options:0 
           range:NSMakeRange(0, [temp length])]; 
    [temp replaceOccurrencesOfString:@"'" 
          withString:@"&apos;" 
          options:0 
           range:NSMakeRange(0, [temp length])]; 

    return [temp autorelease]; 
} 
+8

वाह के रूप में तारों को उद्धृत करने के तरीकों के लिए अन्य उत्तरों पढ़ें, आपका कोड एक औपचारिक फ्रेंच उद्यान जैसा दिखता है। –

+1

अगर मैं इसे अपने कोड के लिए लिख रहा था, तो मैंने वास्तव में एक -रेप्लेसऑक्सेरेंस ओफस्ट्रिंग को परिभाषित किया होगा: withString: NSMutableString पर एक श्रेणी में विधि और पुनरावृत्ति से बचने के लिए इसका उपयोग किया जाता है। (शायद मैंने इसे एक समारोह के बजाय एनएसएमयूटेबल स्ट्रिंग विधि के रूप में लिखा होगा, इसके बारे में सोचने के लिए भी आओ।) लेकिन मैं इसमें बहुत कुछ शामिल नहीं करना चाहता था। –

+0

कोकोफू का जवाब देखें। यह सही है। –

3

HTML/एक्सएमएल इकाई एन्कोडिंग करने के लिए, आप एक CFMutableString फ़ंक्शन का उपयोग कर सकते हैं:

NSString *result = .....;
CFStringTransform((CFMutableStringRef)result, NULL, kCFStringTransformToXMLHex, false);

सत्य पर CFStringTransform के अंतिम पैरामीटर की स्थापना करके, यह डिकोडिंग के लिए काम करना चाहिए (हेक्स) इकाइयां भी।

3

HTML इकाई एन्कोडिंग/डिकोडिंग के लिए उपयोग CFStringTransform:

CFStringTransform((CFTypeRef)yourMutableString, NULL, CFSTR("Any-Hex/XML"), FALSE);

आप आईसीयू उपयोग करने के लिए बदलने "कोई भी-हेक्स/एक्सएमएल" की जरूरत है। kCFStringTransformToXMLHex पर्याप्त आक्रामक नहीं है।

+0

केसीएफस्ट्रिंगट्रांसफॉर्म टीओएक्सएमएलएचएक्स द्वारा किस तरह की संस्थाओं को याद किया जाता है? –

+1

@StevenKramer उदाहरण के लिए,> या &। – fzwo

संबंधित मुद्दे