как мы передаем строку Mr.X & Mr.Y в URL.Iphone SDk: проблема с амперсандом в строке URL
Я пробовал это, но этот делает все символы, но амперсанд.
[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
Спасибо за помощь.
как мы передаем строку Mr.X & Mr.Y в URL.Iphone SDk: проблема с амперсандом в строке URL
Я пробовал это, но этот делает все символы, но амперсанд.
[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
Спасибо за помощь.
В URL-адресе амперсанд является защищенным ключевым словом, означающим включение переменной querystring. Вы не можете поместить его как часть самого значения. Вам нужно изменить его на что-то другое.
Вот ссылка на тот же вопрос, заданный на StackOverflow: ASP.Net URLEncode Ampersand for use in Query String
Используйте% 26, как URL-адрес побега.
Другие ускользает:
$ %24
& %26
+ %2B
, %2C
/%2F
: %3A
; %3B
= %3D
? %3F
@ %40
Так что если я делаю следующее я прав [statusTextField.text stringByReplacingOccurrencesOfString: @ «и» withString: @ «% 26»] и на моей стороне сервера я заменяю% 26 с & и хранить в БД. – 2009-04-01 14:19:58
-stringByAddingPercentEscapesUsingEncoding:
не выполняет полную кодировку побег. Вы должны вручную добавить кодировки, используя -replaceOccurrencesOfString:withString:
Полный список (зеркальный список Gamecat), как первоначально было предложено на https://devforums.apple.com/message/15674#15674. Как указывает Ник, это дорого, поэтому просто не включайте полный список, не учитывая ваши реальные требования к экранированию.
NSMutableString *escaped = [actionString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[escaped replaceOccurrencesOfString:@"$" withString:@"%24" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"&" withString:@"%26" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"+" withString:@"%2B" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"," withString:@"%2C" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"/" withString:@"%2F" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@":" withString:@"%3A" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@";" withString:@"%3B" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"=" withString:@"%3D" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"?" withString:@"%3F" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"@" withString:@"%40" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@" " withString:@"%20" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"\t" withString:@"%09" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"#" withString:@"%23" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"<" withString:@"%3C" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@">" withString:@"%3E" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"\"" withString:@"%22" options:NSCaseInsensitiveSearch range:wholeString];
[escaped replaceOccurrencesOfString:@"\n" withString:@"%0A" options:NSCaseInsensitiveSearch range:wholeString];
Этот код, безусловно, делает хэш вашего URL.
Я считаю, что правильный код будет больше похож на NSMutableString * escaped = [NSMutableString stringWithString: [actionString ...]]; и NSMakeRange (0, [escaped length])] вместо цельной строки. – kolinko
Сделайте мой день .. THANKS –
Это довольно дорого, CFURLCreateStringByAddingPercentEscapes() лучше. –
Или еще короче:
@implementation NSString (Escaping)
- (NSString*)stringWithPercentEscape {
return [(NSString *) CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)[[self mutableCopy] autorelease],
NULL,
CFSTR("=,!$&'()*+;@?\n\"<>#\t :/"),
kCFStringEncodingUTF8) autorelease];
}
@end
И здесь снова, как соответствовать функции помощника инлайн ARC:
#if __has_feature(objc_arc)
static inline NSString *hxURLEscape(NSString *v) {
static CFStringRef _hxURLEscapeChars = CFSTR("=,!$&'()*+;@?\r\n\"<>#\t :/");
return ((__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(__bridge CFStringRef)[v mutableCopy],
NULL,
_hxURLEscapeChars,
kCFStringEncodingUTF8));
}
#endif
Короче и страшнее :) – bentford
См. Ответ Роджера ниже. Хотя это решение является хорошим общим ответом, это не полная реализация кодировки URL-адресов, как iOS версии 2.2. Если у кого-то есть дополнительная информация об этом, исправленном в последних версиях iOS, прокомментируйте здесь. – memmons
Почему вы mutableCopy это? – user102008
stringByAddingPercentEscapesUsingEncoding
также не работает должным образом с +
.
Вот простое решение:
[[[urlString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding] stringByReplacingOccurrencesOfString:@"&" withString:@"%26"] stringByReplacingOccurrencesOfString:@"+" withString:@"%2b"];
Это точно правильный ответ (по ссылке). –
... за исключением неправильной структуры. Нет .NET на iPhone. –