【问题标题】:iPhone parsing url for GET paramsiPhone 为 GET 参数解析 url
【发布时间】:2011-01-15 16:09:53
【问题描述】:

我有一个通过解析 xml 站点得到的字符串。

http://www.arijasoft.com/givemesomthing.php?a=3434&b=435edsf&c=500

我想要一个能够解析 c 值的 NSString 函数。 有没有默认的函数,还是我自己手动写的。

【问题讨论】:

    标签: iphone string


    【解决方案1】:

    您可以通过 RegExKit Lite 使用正则表达式: http://regexkit.sourceforge.net/RegexKitLite/

    或者您可以将字符串分成组件(这不太好):

    NSString *url=@"http://www.arijasoft.com/givemesomthing.php?a=3434&b=435edsf&c=500";
    NSArray *comp1 = [url componentsSeparatedByString:@"?"];
    NSString *query = [comp1 lastObject];
    NSArray *queryElements = [query componentsSeparatedByString:@"&"];
    for (NSString *element in queryElements) {
        NSArray *keyVal = [element componentsSeparatedByString:@"="];
        if (keyVal.count > 0) {
           NSString *variableKey = [keyVal objectAtIndex:0];
           NSString *value = (keyVal.count == 2) ? [keyVal lastObject] : nil;
        }
    }
    

    【讨论】:

    • 谢谢..这就是我想要使用的。
    • 这一直有效,直到参数值包含“=”字符,如 LptOaQ== 用于代替 NSString *value = [element substringFromIndex:[element rangeOfString:@"="].location+1]; NSString *variableKey = [element substringToIndex:[element rangeOfString:@"="].location];
    • NSString *query = [url 查询];使用起来会更干净,然后用“?”分隔...如果 lastObject 包含一个片段(“#fragment”),则用“&”分隔时的最后一个对象将不是您所期望的。
    【解决方案2】:

    我创建了一个类,使用NSScanner 为您进行此解析,作为几天前same question 的答案。您可能会发现它很有用。

    您可以像这样轻松使用它:

        URLParser *parser = [[[URLParser alloc] initWithURLString:@"http://www.arijasoft.com/givemesomthing.php?a=3434&b=435edsf&c=500"] autorelease];
        NSString *c = [parser valueForVariable:@"c"];   //c=500
    

    【讨论】:

      【解决方案3】:

      尝试以下方法:

      NSURL *url = [NSURL URLWithString:@"http://www.arijasoft.com/givemesomthing.php?a=3434&b=435edsf&c=500"];
      NSMutableString *parameterString = [NSMutableString stringWithFormat:@"{%@;}",[url parameterString]];
      [parameterString replaceOccurrencesOfString:@"&" withString:@";"];
      // Convert string into Dictionary
      NSPropertyListFormat format;
      NSString *error;    
      NSDictionary *paramDict = [NSPropertyListSerialization propertyListFromData:[parameterString dataUsingEncoding:NSUTF8StringEncoding] mutabilityOption: NSPropertyListImmutable format:&format errorDescription:&error];
      
      // Now take the parameter you want
      NSString *value = [paramDict valueForKey:@"c"];
      

      【讨论】:

        【解决方案4】:

        这是使用 NSURLComponentsNSURLQueryItem 类的原生 iOS 方法:

        NSString *theURLString = @"http://www.arijasoft.com/givemesomthing.php?a=3434&b=435edsf&c=500";    
        NSArray<NSURLQueryItem *> *theQueryItemsArray = [NSURLComponents componentsWithString:theURLString].queryItems;
        for (NSURLQueryItem *theQueryItem in theQueryItemsArray)
        {
            NSLog(@"%@ %@", theQueryItem.name, theQueryItem.value);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-09-07
          • 1970-01-01
          • 1970-01-01
          • 2014-02-17
          • 2021-03-29
          • 1970-01-01
          • 2014-07-04
          相关资源
          最近更新 更多