【问题标题】:Escape Quotes in Objective-CObjective-C 中的转义引号
【发布时间】:2012-04-24 09:54:26
【问题描述】:

我正在使用此代码 sn-p 对字符进行编码以对 POST 请求友好:

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

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

如何在IOS中转义引号?

【问题讨论】:

    标签: objective-c ios encoding nsstring escaping


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      我的解决方案是:

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

      【讨论】:

      • 为什么不使用 NSRegularExpression 的 "escapedPatternForString:" 类方法?
      【解决方案3】:

      首先,你不想在你的演员阵容中使用__bridge_retainedCFStringRef。只需使用__bridge

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

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

      (除了在集合中加上引号外,我改用CFBridgingRelease()而不是__bridge_transfer,因为我发现它更清晰。它满足了所有CF“创建”功能都需要相应“发布”的感觉"。另外,我将 @"" 文字转换为 CFStringRef 的使用更改为 CFSTR("") 文字。)

      【讨论】:

        【解决方案4】:

        引号要用\"转义。

        如:

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

        【讨论】:

        • 我知道,我想让你知道如何让用户输入"并将其更改为:\"
        猜你喜欢
        • 1970-01-01
        • 2012-05-26
        • 1970-01-01
        • 2011-12-15
        • 2016-01-16
        • 1970-01-01
        • 1970-01-01
        • 2011-11-19
        • 2010-10-14
        相关资源
        最近更新 更多