ios Objective-C 中的转义引号
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10117031/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Escape Quotes in Objective-C
提问by Moe
I'm using this code snippet to encode characters to be friendly with a POST request:
我正在使用此代码片段对字符进行编码以对 POST 请求友好:
NSString *unescaped = [textField text];
NSString *escapedString = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(__bridge_retained CFStringRef)unescaped,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
Which works great, but does not add escape Quotation marks: "
效果很好,但不添加转义引号: "
How do I escape Quotation marks in IOS?
如何在 IOS 中转义引号?
回答by Moe
I think I didn't word the question correctly.
我想我没有正确表达这个问题。
I needed to take the user inputted NSString from [textField text]
and make sure that if there are quotation marks in the string, they are escaped properly in order to send through a POST statement.
我需要从用户输入的 NSString 中获取[textField text]
并确保如果字符串中有引号,它们会被正确转义以便通过 POST 语句发送。
My solution was:
我的解决方案是:
unescaped = [unescaped stringByReplacingOccurrencesOfString:@"\"" withString:@"\\""];
Thanks
谢谢
回答by Ken Thomases
First, you don't want to use __bridge_retained
in your cast to a CFStringRef
. Just use __bridge
.
首先,您不想__bridge_retained
在您的演员表中使用CFStringRef
. 只需使用__bridge
.
Second, you don't have to escape the quotes manually by string replacement. Just add the quote character to the set of characters to be quoted when calling CFURLCreateStringByAddingPercentEscapes()
. Like so:
其次,您不必通过字符串替换手动转义引号。只需将引号字符添加到调用CFURLCreateStringByAddingPercentEscapes()
. 像这样:
NSString *unescaped = [textField text];
NSString *escapedString = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,
(__bridge CFStringRef)unescaped,
NULL,
CFSTR("!*'();:@&=+$,/?%#[]\""),
kCFStringEncodingUTF8));
(In addition to adding the quote to the set, I changed to use CFBridgingRelease()
rather than a __bridge_transfer
cast because I find it clearer. It satisfies the feeling that all CF "Create" functions need a corresponding "Release". Also, I changed the use of a @""
literal cast to CFStringRef
to just a CFSTR("")
literal.)
(除了把quote加到set里,我改成useCFBridgingRelease()
而不是__bridge_transfer
cast,因为我觉得更清晰。满足了CF所有的“Create”函数都需要一个对应的“Release”的感觉。另外,我把use改成了一个@""
字面投来CFStringRef
只是一个CFSTR("")
文本。)
回答by CodaFi
Quotes are to be escaped with \"
.
引号是要转义的\"
。
As in:
如:
(CFStringRef)@"I'm an \"example\""
回答by adi27
try using \" instead of using " directly...
尝试使用 \" 而不是直接使用 "...
Special Characters like Quotes, slashes and others require \ to make that character to remove its special functionality.
引号、斜杠和其他特殊字符需要 \ 才能使该字符删除其特殊功能。