2009-06-25 8 views
3

У меня есть код, похожий на следующий, с таким URL-адресом ... Если я использую первый * url, веб-страница вернет значение null. Если я поместил этот URL в систему сокращения URL-адресов, например bit.ly, он будет работать и вернет страницы HTML как строку. Я могу только думать, что у меня есть недопустимые символы в моем первом * url? Есть идеи?stringWithContentsOfURL не работает с определенной строкой

NSString *url [email protected]"http://www.testurl.com/testing/testapp.aspx/app.detail/params.frames.y.tpl.uk.item.1.cm_scid.TB-test/left.html.|metadrill,html/walk.yah.ukHB?cm_re=LN-_-OnNow-_-TestOne"; 

//above *url does not work, one below does 
NSURL *url =[NSURL URLWithString: @"http://bit.ly/shortened"]; 
NSString *webpage = [NSString stringWithContentsOfURL:url]; 

ответ

3

Вы, вероятно, нужно, чтобы избежать некоторых символов в первом URL следующим образом:

NSString *url [email protected]"http://www.testurl.com/testing/testapp.aspx/app.detail/params.frames.y.tpl.uk.item.1.cm_scid.TB-test/left.html.|metadrill,html/walk.yah.ukHB?cm_re=LN-_-OnNow-_-TestOne"; 
NSString *escapedURL = [url stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 
NSString *webpage = [NSString stringWithContentsOfURL:[NSURL URLWithString:escapedURL]];

Строительство URL и его выборки потерпит неудачу, если URL содержит символы, которые не экранированы (глядя на ваш URL-адрес, это, вероятно, труба (|), вопросительный знак или подчеркивание).

+0

Спасибо Тим, отлично работает! Что значит «сбежать»? –

+0

Символ «экранированный» представлен шестнадцатеричным кодом, который преобразуется в символ, а не сам символ. Например, в URL-адресах пространство должным образом представлено его «экранированным» шестнадцатеричным представлением% 20. % Указывает серверу, что символ экранирован, а следующие два символа обрабатываются как шестнадцатеричные и преобразуются на стороне сервера обратно к соответствующему неэкранированному символу. Это способ передачи необычных символов (труб и т. Д.) Надежно. – Tim