4

iPhoneアプリから次のURLを呼び出しています

NSString *resourcePath = [NSString stringWithFormat:@"/sm/search?limit=100&term=%@&types[]=users&types[]=questions", searchTerm];

しかし、サーバー呼び出しが行われたとき、送信された実際のURLはこれであることがわかりました

/sm/search?term=mi&types%5B%5D=questions&limit=100

正しいURLがサーバーに送信されるように、これを解決するにはどうすればよいですか?

4

1 に答える 1

3

NSURL私はあなたが方法を使うと仮定します

initWithScheme:host:path:

URLを作成します。ドキュメントによると、このメソッドはstringByAddingPercentEscapesUsingEncoding:メソッドを使用してパスを自動的にエスケープします。

角かっこは、RFC 1738の意味で「安全ではない」ため、エスケープされています-Uniform Resource Locator(URL)

キャラクターはいくつかの理由で安全ではない可能性があります。[...]ゲートウェイや他のトランスポートエージェントがそのような文字を変更することがあることが知られているため、他の文字は安全ではありません。これらの文字は、「{」、「}」、「|」、「\」、「^」、「〜」、「[」、「]」、および「`」です。

安全でない文字はすべて、常にURL内にエンコードする必要があります。

でURLを作成する場合

NSString *s = [NSString stringWithFormat:@"http://server.domain.com/sm/search?limit=100&term=%@&types[]=users&types[]=questions", searchTerm];
NSURL *url = [[NSURL alloc] initWithString:s];

initWithString文字列には必要なパーセントエスケープコードが含まれていると想定されるため、エスケープシーケンスは追加されません。

于 2012-12-16T13:08:04.077 に答える