8

我正在使用此代码片段对字符进行编码,以便对 POST 请求友好:

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

效果很好,但不添加转义引号:"

如何在IOS中转义引号?

4

4 回答 4

16

我需要从用户输入的 NSString 中获取[textField text]并确保如果字符串中有引号,它们会被正确转义以便通过 POST 语句发送。

我的解决方案是:

unescaped = [unescaped stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
于 2012-04-12T09:27:40.833 回答
4

首先,你不想__bridge_retained在你的演员阵容中使用CFStringRef. 只需使用__bridge.

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

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

(除了在set里加了quote之外,我改成useCFBridgingRelease()而不是__bridge_transfercast,因为我觉得更清晰。满足了所有CF的“Create”函数都需要一个对应的“Release”的感觉。另外,我改了use@""文字转换CFStringRef为文字CFSTR("")。)

于 2012-04-14T07:54:48.360 回答
2

引号要用 . 转义\"

如:

(CFStringRef)@"I'm an \"example\""
于 2012-04-12T03:41:53.710 回答
0

尝试使用\"而不是"直接使用...

引号、斜线等特殊字符需要\使该字符删除其特殊功能。

于 2012-04-12T03:38:01.717 回答