iphone - urls - url google satellite




SDK de iPhone: ¿comprueba la validez de las URL con NSURL que no funciona? (4)

Creo que puede estar confundido con respecto a la definición de "malformado". Cualquier cosa que se ajuste a RFC 2396 se considera válida; en la práctica, parece que NSURL también aceptará [ y ] pesar de que el RFC no lo permita.

Eso significa prácticamente cualquier cadena de caracteres ASCII imprimibles además del espacio, " , % cuando no va seguido de dos dígitos hexadecimales, < , > , \ , ^ , ` , { , | y } se considerarán "válidos", aunque puede no ser absoluto o generalmente útil. Las cadenas que contienen # múltiple también pueden ser rechazadas.

Estoy tratando de verificar si una URL dada es válida y lo estoy haciendo así:

- (BOOL)urlIsValid:(NSString *)address {
    NSURL *testURL = [NSURL URLWithString:address];
    if (testURL == nil) {
        return NO;
    }
    else {
        return YES;
    }
}

Como se supone que "URLWithString" devuelve "nil" si la URL está mal formada, pensé que esto funcionaría, pero no por alguna razón. ¿Podría alguien decirme por qué? ¡Gracias por adelantado!


En mi experiencia, las rutinas de creación de NSURL suelen arrojar una excepción en lugar de devolver cero. Sin embargo, la verdadera pregunta en este caso es qué constituye una URL mal formada. ¿Estás verificando si existe un recurso, o verificando si la estructura de la cadena cumple con las RFC relevantes?

Con respecto al primer problema que mencioné, cuando creo URLs que no ingreso manualmente, generalmente hago esto:

@try
{
    NSURL * url = [NSURL URLWithString: theString];
    // use the URL
}
@catch (NSException * e)
{
    NSLog( @"URL creation error? %@ - %@", [e name], [e reason] );
    @throw;  // throw the exception again, to hopefully get your attention
}

comprobar que este método funciona bien para mí

- (BOOL) validateUrl: (NSString *) candidate {
NSString *urlRegEx =
@"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+";
NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx];
return [urlTest evaluateWithObject:candidate];

}

if (![self validateUrl:strRSSurl]) {
        UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Invalid url" message:[NSString stringWithFormat:@"\"%@\"",strRSSurl] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
        [alert show ];
        [alert setTag:7];
    }
    else
    {
      valid url
    }

NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"yourstring"]];
bool valid = [NSURLConnection canHandleRequest:req];




nsurl