目标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_retained
到CFStringRef
。 只要使用__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。