Escape-кавычки в Objective-C
Я использую этот фрагмент кода для кодирования символов, чтобы быть дружелюбным с POST-запроса:
NSString *unescaped = [textField text];
NSString *escapedString = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(__bridge_retained CFStringRef)unescaped,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
который отлично работает, но не добавляет кавычки escape:"
Как избежать кавычек в IOS?
4 ответов
Я думаю, что я не правильно сформулировал вопрос.
мне нужно было взять введенную пользователем NSString из [textField text]
и убедитесь, что если в строке есть кавычки, они экранируются должным образом, чтобы отправить оператор POST.
мое решение было:
unescaped = [unescaped stringByReplacingOccurrencesOfString:@"\"" withString:@"\\""];
спасибо
во-первых, вы не хотите использовать __bridge_retained
в литой к CFStringRef
. Просто используйте __bridge
.
во-вторых, вам не нужно избегать кавычек вручную заменой строки. Просто добавьте символ цитаты в набор символов, которые будут цитироваться при вызове CFURLCreateStringByAddingPercentEscapes()
. Вот так:
NSString *unescaped = [textField text];
NSString *escapedString = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,
(__bridge CFStringRef)unescaped,
NULL,
CFSTR("!*'();:@&=+$,/?%#[]\""),
kCFStringEncodingUTF8));
(в дополнение к добавлению цитаты в набор, я изменил использование CFBridgingRelease()
, а не __bridge_transfer
бросок, потому что я нахожу его более четким. Это удовлетворяет чувство, что все CF " создать" функции нуждаются в соответствующем "выпуске". Кроме того, я изменил использование @""
буквальный бросок в CFStringRef
просто CFSTR("")
литерал.)
попробуйте использовать \" вместо использования " напрямую...
специальные символы, такие как кавычки, косые черты и другие, требуют \ сделать этот символ, чтобы удалить его специальную функциональность.