2016-03-22 5 views
0

Я создаю экран, на котором пользователь может вводить любой текст. Теперь текст должен быть преобразован в действительный URL. Я посмотрел на много переполнения стека вопрос, и они придумали Обойти решение: 1. CFURLCreateStringByAddingPercentEscapesконвертировать строку в URL-адрес-C

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

2. Категория на струне

- (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; 
} 

Пример: Если пользователь вручную ставит требуемый% 20 (например) в тексте вместо пробела, а затем, если мы воспользуемся любым из вышеуказанных решений,% 20 будет преобразовываться в% 25.

Может ли кто-нибудь сообщить мне, как я могу исправить проблему.

ответ

0

Поскольку % будет urlencoded к %25, на самом деле %20 будет urlencoded к %2520, что требуемый выход.

Если вы хотите сохранить %20 в пользовательском вводе, вы можете заменить все %20 на одно пустое пространство, а затем урлокодировать замененную строку.

+0

Это был один пример. Как обращаться с другими? В любом случае, нужно обрабатывать такие senaroies и преобразовывать строку в действительный url.? –