目标C中的转义引号

我使用这个代码片段来编码字符与POST请求友好:

NSString *unescaped = [textField text]; NSString *escapedString = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes( NULL, (__bridge_retained CFStringRef)unescaped, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8); 

哪个效果很好,但是不加逃脱引号: "

我如何逃避IOS中的引号?

我想我没有正确地说出这个问题。

我需要从[textField text]input用户input的NSString,并确保如果string中有引号,它们将被正确转义以便通过POST语句发送。

我的解决scheme是:

 unescaped = [unescaped stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""]; 

谢谢

首先,你不想在你的转换中使用__bridge_retainedCFStringRef 。 只要使用__bridge

其次,您不必通过stringreplace手动转义报价。 在调用CFURLCreateStringByAddingPercentEscapes()时,只需将引号字符添加到要引用的字符集。 像这样:

 NSString *unescaped = [textField text]; NSString *escapedString = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge CFStringRef)unescaped, NULL, CFSTR("!*'();:@&=+$,/?%#[]\""), kCFStringEncodingUTF8)); 

(除了向集合添加引号外,我更改为使用CFBridgingRelease()而不是__bridge_transfer因为我发现它更清晰,满足所有CF“创build”函数都需要相应的“释放”的感觉。改变了@""文字转换为CFStringRef使用只是一个CFSTR("")文字。)

行情是用\"逃脱。

如:

 (CFStringRef)@"I'm an \"example\"" 

尝试使用\“,而不是直接使用”…

特殊字符如引号,斜杠和其他字符需要使该字符去除其特殊function。