Как отправить вопросительный знак в веб-службу? Цель-с

Раньше у меня была проблема с отправкой специальных символов в веб-службу. Но теперь я могу отправить все специальные символы, кроме "?" что я не понимаю, почему.

NSString+URLEndoding.h

@interface NSString (NSString_URLEncoding) //originally NSOBject
- (NSString *)urlEncodeUsingEncoding:(CFStringEncoding)encoding;
- (NSString *)urlEncode;
@end

NSString+URLEndoding.m

@implementation NSString (NSString_URLEncoding)

- (NSString *)urlEncodeUsingEncoding:(CFStringEncoding)encoding {
return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                 (__bridge CFStringRef)self,
                                                                 NULL,
                                                                 CFSTR("!*'();:@&=+$,/?%#[]"),
                                                                 encoding));
}

- (NSString *)urlEncode {
    return [self urlEncodeUsingEncoding:kCFStringEncodingUTF8];
}

@end

Ниже приведены некоторые части UpdateSomething.m:

    NSString *encodeSomething = [something urlEncode];
    NSMutableString *post = [NSMutableString stringWithFormat:@"something=%@", encodeSomething];
    //NSLog(@"post: %@", post);
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding];
    //NSLog(@"PostData: %@", postData);
    NSString *check = [[NSString alloc] initWithData:postData encoding:NSASCIIStringEncoding]; //UTF8 also works.
    NSLog(@"check string = %@", check);
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:strURLQueryString]];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody:postData];
    NSURLResponse *response;
    NSError *err=nil;
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
}

Результат проверки:

check string = something%20%3F

Я знаю, что "%3F" = "?". Но я не понимаю, почему я получаю сообщение об ошибке всякий раз, когда нажимаю вопросительный знак.

Response: Input Array does not match ?

Ваша помощь приветствуется.


person Confused_person    schedule 19.08.2013    source источник
comment
попробуйте \\ перед вопросительным знаком   -  person manujmv    schedule 19.08.2013
comment
Это ответ от сервера? Что заставляет вас думать, что ответ имеет какое-то отношение к закодированному вопросительному знаку? Можете ли вы просто вернуть серверу параметры запроса или зарегистрировать их? шаг 1 — подтвердить, что параметры приходят так, как вы ожидаете, шаг 2 — убедиться, что сервер работает правильно. Я думаю, что вы правильно отправляете знак вопроса как %3f, но, возможно, ваш сервер не хочет знака вопроса.   -  person danh    schedule 19.08.2013
comment
Я могу успешно выполнить запрос на своем сервере SQL. Однако, когда я посмотрел на скрипт, там есть add_escape_custom($something). add_escape_custom() вызывает эту функцию mysql_real_escape_string(). Я думал, что это так, я удалил add_escape_custom. Но все равно не получается ввести ?.   -  person Confused_person    schedule 19.08.2013


Ответы (1)


Я попытался сделать это снова через некоторое время после того, как опубликовал этот вопрос.

Раньше я использовал веб-сервис, написанный кем-то другим. Я подозреваю, что это как-то связано с какой-то пользовательской функцией экранирования символов.

На этот раз я написал свой собственный веб-сервис, и он отлично работает. Мне даже не нужно использовать "NSString_URLEncoding"

person Confused_person    schedule 01.11.2013