2012-01-01 3 views
7

私は疑問符(?)をエスケープしないので、stringByAddingPercentEscapesUsingEncodingからCFURLCreateStringByAddingPercentEscapesに切り替える必要がありました。私はそれが脱出し、まさに好奇心旺盛だし、部分的な理論的根拠はいくつかの良いカテゴリはあなたが必要なものばかりやっ用に作成されたRFC 3986stringByAddingPercentEscapesUsingEncodingがエスケープする文字は何ですか?

答えて

1

対エスケープ: http://iosdevelopertips.com/networking/a-better-url-encoding-method.html http://www.cocoanetics.com/2009/08/url-encoding/

根拠残しますある特定の文字が私の外に出ています...ただし、関数の定義は次のとおりです。

完全に正しいように、+と&はURL内の正当な文字ですが、スペースはありません。したがって、メソッドは正しくスペースをエスケープしますが、+と&はそのまま残ります。

読み込みRFC2396 http://www.ietf.org/rfc/rfc2396.txt - 予約された文字と予約されていない文字のセットがあります。私の推測では、これらの文字のどれもがstringByAddingPercentEscapesUsingEncodingによってエスケープされないということです。

+0

今、私はその文書を読むのにほんの数分しか要しません。:) –

5

CFStringRefを使用しているときに、変換時にメモリがリークしないように注意してください。ここで私はラテン文字などで作業するために思いついたことがあります。私はURL全体ではなく、パラメータをエスケープするためにこれを使用します。あなたのユースケースに応じて、「escapeChars」私はこれが役に立てば幸い

CFStringRef escapeChars = (CFStringRef)@"%;/?¿:@&=$+,[]#!'()*<>¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ \"\n"; 

NSString *encodedString = (__bridge_transfer NSString *) CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge_retained CFStringRef) url, NULL, escapeChars, kCFStringEncodingUTF8); 

から文字を追加または削除する必要があるかもしれません。

関連する問題