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です。

第 2 に、文字列置換によって手動で引用符をエスケープする必要はありません。を呼び出すときに、引用する文字セットに引用文字を追加するだけCFURLCreateStringByAddingPercentEscapes()です。そのようです:

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

(セットに引用を追加することに加えてCFBridgingRelease()、キャストではなく使用するように変更しまし__bridge_transferた。これは、より明確になったためです。すべてのCFの「作成」機能には、対応する「リリース」が必要であるという感覚を満たしています。また、使用を変更しました単なるリテラルへの@""リテラルキャスト。)CFStringRefCFSTR("")

于 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 に答える