iphone - stringbyremovingpercentencoding - swift url中文




带字符串的NSURL (5)

与iOS 9.0一样,

stringByAddingPercentEscapesUsingEncoding:

已被弃用。

使用以下方法将String转换为NSURL

let URL = "URL GOES HERE"
let urlString = URL.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLFragmentAllowedCharacterSet())

我有NSURL的问题。 我正在尝试用字符串创建NSURL

    NSString *prefix = (@"tel://1234567890 ext. 101");
    NSString *dialThis = [NSString stringWithFormat:@"%@", prefix];
    NSURL *url = [[NSURL alloc] initWithString:dialThis];
    NSLog(@"%@",url);

也试过了

    NSURL *url = [NSURL URLWithString:dialThis];

但它给出了null。 怎么了 ?

谢谢..


在将任何字符串作为您无法控制的URL传递之前,您必须对空白进行编码:

 NSString *dialThis = [prefix stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
 // tel://1234567890%20ext.%20101

作为旁注,iOS不会拨打任何分机。 用户必须手动执行此操作。

Apple URL Scheme参考:电话链接

为防止用户恶意重定向电话或更改电话或帐户的行为,电话应用程序支持tel方案中的大多数但不是全部特殊字符。 具体来说,如果URL包含*或#字符,则电话应用程序不会尝试拨打相应的电话号码。


尝试这个,它适合我....

NSString *prefix = (@"tel://1234567890 ext. 101");
NSString *dialThis = [NSString stringWithFormat:@"%@", prefix];
NSURL *url = [NSURL URLWithString:[queryString stringByReplacingOccurrencesOfString:@" " withString:@"%20"]];
NSLog(@"%@",url);

您的问题是URL中未转义的空格。 例如,这可以工作:

    NSURL *url = [NSURL URLWithString:@"tel://1234567890x101"];

编辑:就像这样..

    NSURL *url2 = [NSURL URLWithString:[@"tel://1234567890 ext. 101"
        stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

扩展以在项目的任何部分中使用:

extension String {
    var asNSURL: NSURL! {
        return NSURL(string: self)
    }
}

从现在开始你可以使用

let myString = "http://www.example.com".asNSURL

要么

myString.asNSURL




nsurl