逃生在Objective-C报价(Escape Quotes in Objective-C)

2019-06-23 13:25发布

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

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

伟大的工程,但不加逃逸引号: "

如何逃避IOS引号?

Answer 1:

我觉得我没有这个词的问题正确。

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

我的解决办法是:

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

谢谢



Answer 2:

首先,你不希望使用__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("")文本。)



Answer 3:

行情要与转义\"

如:

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


Answer 4:

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

特殊字符,如行情,斜线和其他需要\使该字符删除其特殊的功能。



文章来源: Escape Quotes in Objective-C