将字符串转换为URL objective-C

时间:2016-03-22 04:59:07

标签: objective-c webview url-encoding

我正在创建一个用户可以输入任何文本的屏幕。现在该文本必须转换为有效的URL。我已经研究了很多堆栈溢出问题,他们提出了愚蠢的解决方案: 1. CFURLCreateStringByAddingPercentEscapes

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。

有人可以告诉我如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

由于%将被解压缩为%25,实际上%20将被解压缩为%2520,这是所需的输出。

如果您希望将%20保留在用户输入中,则可以将所有%20替换为一个空格,然后对已替换的字符串进行urlencoded。