2009-04-01 9 views

答えて

-2

URLで、アンパサンドは、クエリー文字列変数のインクルードを示す保護されたキーワードです。あなたはそれを値そのものの一部として入れることはできません。それを別のものに変更する必要があります。 URLエスケープとして%26 ASP.Net URLEncode Ampersand for use in Query String

+0

:ここ

は簡単なソリューションです。 –

+5

...それは間違ったフレームワークのためです。 iPhoneに.NETはありません。 と私のサーバー側で私は&とストアとデシベルで26%を置き換える、私は次の操作を行う場合 –

4

使用:ここで

はStackOverflowの上で尋ねた同じ質問へのリンクです。

その他のエスケープ:

$ %24 
& %26 
+ %2B 
, %2C 
/%2F 
: %3A 
; %3B 
= %3D 
? %3F 
@ %40 
+0

は、だから私は右 [:「&」withString @「%26」@ statusTextField.text stringByReplacingOccurrencesOfString]です。 –

31

-stringByAddingPercentEscapesUsingEncoding:は、完全なエスケープのエンコードを実行しません。 -replaceOccurrencesOfString:withString:

https://devforums.apple.com/message/15674#15674で最初に示唆された完全なリスト(Gamecatのリストをミラーリング)です。 Nickが指摘しているように、これは高価なので、実際のエスケープ要件を考慮せずに完全なリストを含めるだけではありません。

NSMutableString *escaped = [actionString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
[escaped replaceOccurrencesOfString:@"$" withString:@"%24" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"&" withString:@"%26" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"+" withString:@"%2B" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"," withString:@"%2C" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"/" withString:@"%2F" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@":" withString:@"%3A" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@";" withString:@"%3B" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"=" withString:@"%3D" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"?" withString:@"%3F" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"@" withString:@"%40" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@" " withString:@"%20" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"\t" withString:@"%09" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"#" withString:@"%23" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"<" withString:@"%3C" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@">" withString:@"%3E" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"\"" withString:@"%22" options:NSCaseInsensitiveSearch range:wholeString]; 
[escaped replaceOccurrencesOfString:@"\n" withString:@"%0A" options:NSCaseInsensitiveSearch range:wholeString]; 

このコードは、あなたのURLのハッシュを作成します。

+8

私は適切なコードはもっと似ていると信じています NSMutableString *エスケープ= [NSMutableString stringWithString:[actionString ...]]; とNSMakeRange(0、[エスケープされた長さ])]を使用します。 – kolinko

+0

私の日を作る..ありがとうございます –

+1

これは非常にコストがかかり、CFURLCreateStringByAddingPercentEscapes()が優れています。 –

36

あるいは短い:

@implementation NSString (Escaping) 
- (NSString*)stringWithPercentEscape {    
    return [(NSString *) CFURLCreateStringByAddingPercentEscapes(
     NULL, 
     (CFStringRef)[[self mutableCopy] autorelease], 
     NULL, 
     CFSTR("=,!$&'()*+;@?\n\"<>#\t :/"), 
     kCFStringEncodingUTF8) autorelease]; 
} 
@end 

そして、ここでは、ARCは、インライン関数ヘルパーに準拠して、再びです:

#if __has_feature(objc_arc) 
static inline NSString *hxURLEscape(NSString *v) { 
    static CFStringRef _hxURLEscapeChars = CFSTR("=,!$&'()*+;@?\r\n\"<>#\t :/"); 
    return ((__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(
     NULL, 
     (__bridge CFStringRef)[v mutableCopy], 
     NULL, 
     _hxURLEscapeChars, 
     kCFStringEncodingUTF8)); 
} 
#endif 
+2

短くて怖い:) – bentford

+0

下記のRogerの答えをご覧ください。このソリューションは一般的な回答ですが、iOSバージョン2.2以降の完全なURLエンコード実装ではありません。これ以降のiOSリリースで修正されていることに関する追加情報がある場合は、ここでコメントしてください。 – memmons

+1

あなたはなぜそれをコピーできますか? – user102008

0

stringByAddingPercentEscapesUsingEncoding+で正しく動作しません。これは、まさに(リンク時)正解です

[[[urlString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding] stringByReplacingOccurrencesOfString:@"&" withString:@"%26"] stringByReplacingOccurrencesOfString:@"+" withString:@"%2b"]; 
関連する問題