2014-01-17 3 views
1

Я использую stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding для передачи данных в php-скрипт. Проблема в том, что поле имеет char '&', в тексте можно сказать: 'кто-то & cars', только текст «кто-то» сохраняется, все после «&» этого не делает.stringByAddingPercentEscapesUsingEncoding не удаляется «&»

Для создания строки я использую [NSString stringWithFormat:], так что я как 5 поля в форме и, если я использую stringbyReplacingOcorrencesOfstring:@"&", что он делает это заменить всю строку не только символом «&» из текстового поля, так что я получаю ошибка.

Любые идеи?

+1

возможно дубликат [Iphone SDk: Проблема с амперсанд в строке URL] (http://stackoverflow.com/questions/705448/iphone-sdk-issue-with-ampersand-in-the-url- строка) – matt

+1

ASCII? Что это? 1980? Молитесь о том, что в тексте никогда не говорится «Es grünt so grün, wenn Spaniens Blüten blühen» ;-) Серьезно: вам, скорее всего, следует использовать UTF8 вместо ASCII. –

+0

:) Хорошо, я буду использовать отныне точно, но это не решит проблему. – Patrick

ответ

6

К сожалению, stringByAddingPercentEscapesUsingEncoding: фактически не удаляет все необходимые URL-адреса.

Вместо этого, вы можете использовать функцию нижнего уровня CoreFoundation:

(NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)myString, NULL, (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ", CFStringConvertNSStringEncodingToEncoding(encoding)); 

или, при использовании ARC:

CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge CFStringRef)myString, NULL, (__bridge CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ", CFStringConvertNSStringEncodingToEncoding(encoding))); 

См this post для примера категории на NSString, которая использует эту функцию ,

+0

:(извините, еще не повезло .. не могу заставить эту работу работать ... – Patrick

2

Следующие работы с использованием stringByAddingPercentEncodingWithAllowedCharacters, если вы хотите специально разрешить то, что было бы закодировано самостоятельно. Я использую после base64, так что это отлично работает.

NSString *charactersToEscape = @"!*'();:@&=+$,/?%#[]\" "; 
NSCharacterSet *customEncodingSet = [[NSCharacterSet characterSetWithCharactersInString:charactersToEscape] invertedSet]; 

NSString *url = [NSString stringWithFormat:@"%@", @"http://www.test.com/more/test.html?name=john&age=28"]; 
NSString *encodedUrl = [url stringByAddingPercentEncodingWithAllowedCharacters:customEncodingSet]; 
Смежные вопросы