Url minus query string in Objective-C

hpi*_*que 25 url objective-c nsurl nsstring

What's the best way to get an url minus its query string in Objective-C? An example:

Input:

http://www.example.com/folder/page.htm?param1=value1&param2=value2
Run Code Online (Sandbox Code Playgroud)

Output:

http://www.example.com/folder/page.htm
Run Code Online (Sandbox Code Playgroud)

Is there a NSURL method to do this that I'm missing?

And*_*ree 40

从iOS 8/OS X 10.9开始,使用NSURLComponents可以更轻松地完成此操作.

NSURL *url = [NSURL URLWithString:@"http://hostname.com/path?key=value"];
NSURLComponents *urlComponents = [[NSURLComponents alloc] initWithURL:url resolvingAgainstBaseURL:NO];

urlComponents.query = nil; // Strip out query parameters.
NSLog(@"Result: %@", urlComponents.string); // Should print http://hostname.com/path
Run Code Online (Sandbox Code Playgroud)


Sim*_*ker 37

我看不到NSURL方法.您可以尝试以下方法:

NSURL *newURL = [[NSURL alloc] initWithScheme:[url scheme]
                                         host:[url host]
                                         path:[url path]];
Run Code Online (Sandbox Code Playgroud)

测试看起来不错:

#import <Foundation/Foundation.h>
int main(int argc, char *argv[]) {
    NSAutoreleasePool *arp = [[NSAutoreleasePool alloc] init];

    NSURL *url = [NSURL URLWithString:@"http://www.abc.com/foo/bar.cgi?a=1&b=2"];
    NSURL *newURL = [[[NSURL alloc] initWithScheme:[url scheme]
                                              host:[url host]
                                              path:[url path]] autorelease];
    NSLog(@"\n%@ --> %@", url, newURL);
    [arp release];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行它会产生:

$ gcc -lobjc -framework Foundation -std=c99 test.m ; ./a.out 
2010-11-25 09:20:32.189 a.out[36068:903] 
http://www.abc.com/foo/bar.cgi?a=1&b=2 --> http://www.abc.com/foo/bar.cgi
Run Code Online (Sandbox Code Playgroud)

  • 很好的解决方案,唯一的问题是`port`不会被转移. (4认同)

BLC*_*BLC 14

这是Andree的答案的Swift版本,有一些额外的味道 -

extension NSURL {

    func absoluteStringByTrimmingQuery() -> String? {
        if var urlcomponents = NSURLComponents(URL: self, resolvingAgainstBaseURL: false) {
            urlcomponents.query = nil
            return urlcomponents.string
        }
        return nil
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以这样称呼它 -

let urlMinusQueryString  = url.absoluteStringByTrimmingQuery()
Run Code Online (Sandbox Code Playgroud)


Abh*_*ain 6

迅捷版

extension URL {
    func absoluteStringByTrimmingQuery() -> String? {
        if var urlcomponents = URLComponents(url: self, resolvingAgainstBaseURL: false) {
            urlcomponents.query = nil
            return urlcomponents.string
        }
        return nil
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!