2016-03-22 18 views
0

Kullanıcının herhangi bir metni girebileceği bir ekran oluşturuyorum. Şimdi bu metin geçerli bir URL'ye dönüştürülmelidir. ipteDizgiyi URL hedefine dönüştür C

- (NSString *)urlencode { 
    NSMutableString *output = [NSMutableString string]; 
    const unsigned char *source = (const unsigned char *)[self UTF8String]; 
    int sourceLen = strlen((const char *)source); 
    for (int i = 0; i < sourceLen; ++i) { 
     const unsigned char thisChar = source[i]; 
     if (thisChar == ' '){ 
      [output appendString:@"+"]; 
     } else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' || 
        (thisChar >= 'a' && thisChar <= 'z') || 
        (thisChar >= 'A' && thisChar <= 'Z') || 
        (thisChar >= '0' && thisChar <= '9')) { 
      [output appendFormat:@"%c", thisChar]; 
     } else { 
      [output appendFormat:@"%%%02X", thisChar]; 
     } 
    } 
    return output; 
} 

Örnek 1. CFURLCreateStringByAddingPercentEscapes

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

2. Kategori: Ben yığın taşması sorununun çok içine baktım ve şu kandırmaca çözüm ile geldi kullanıcı el koyarsa beyaz boşluk yerine metinde gerekli% 20 (örneğin) ve sonra yukarıdaki çözümlerden herhangi birini kullanırsak% 20,% 25'e dönüşür.

Sorunu nasıl düzeltebilirim? %%25 için urlkodlamasi olacak

cevap

0

için, aslında %20 istenen çıkış olan, %2520 için urlkodlamasi edilecektir.

Kullanıcı girdisinde %20'u saklamak istiyorsanız, tüm %20 öğelerini tek bir beyaz boşlukla değiştirebilir, ardından değiştirilen dizgiyi kodlayarak kodlayabilirsiniz.

+0

Bu sadece bir örnekti. Diğerleriyle nasıl başa çıkabilirim? Bu tür senaroileri işlemek ve dizeyi geçerli URL'ye dönüştürmek için zaten var mı? –