0

たとえば、これらの文字をサーバーに渡そうとしました*()$

私はこのようにNSUrlをコーディングしました:

NSString *partialURL = [NSString stringWithFormat:@"/%@", commentBody];
NSString *fullURL = [NSString stringWithFormat:@"%@%@", CONST_URL, partialURL];
NSString *encStr = [fullURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:encStr];

しかし、その後、commentBody渡された URL にはまだ*()$物があり、utf8 にエンコードされていません。

それを行う正しい方法は何ですか?ありがとう!

4

1 に答える 1

1
NSString * test = (NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, 
                                                                            (CFStringRef)validUrl,
                                                                            NULL, 
                                                                            (CFStringRef)@";/?:@&=$+{}<>,",
                                                                            kCFStringEncodingUTF8);

アップデート

こんにちは@レンディ。昨日は即答ですみません。飛び降りる前にワンライナーを通過する時間しかなかったので、あなたが抱えていた問題を修正するのに十分であることを望んでいました.

URL のパラメーターは常にエンコードする必要があります。別の URL へのパラメーターであるか、XML に埋め込まれている URL がある場合。URL全体をエンコードする必要があります(つまり、パラメーターが二重にエンコードされます-「有効な」URLを取得してエスケープし、別のURLで有効なパラメーターになるためです(つまり、:エスケープさ&れるため、パラメーターは一緒に混ぜる。)

必要に応じて、以下の文字列に文字を追加すると、パーセントでエンコードされた値に置き換えられます。以下の文字列は、無効な値をすでにカバーしていると思います。

のカテゴリは次のNSStringとおりです。

@implementation NSString (encode)

+ (NSString*)stringEncodedAsUrlParameter:(NSString *)string
{
    NSString *newString = NSMakeCollectable(
                [(NSString *)CFURLCreateStringByAddingPercentEscapes(
                                                                     kCFAllocatorDefault,
                                                                     (CFStringRef)string,
                                                                     NULL, /* charactersToLeaveUnescaped */
                                                                     CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"),
                                                                     kCFStringEncodingUTF8
                                                                     ) autorelease]
                );

    if (newString) {
        return newString;
    }
    return @"";
}


- (NSString*)stringByEncodingAsUrlParameter
{
    return [NSString stringEncodedAsUrlParameter:self];
}

@end

次のように呼び出します。

NSString * escapedParameters = [NSString stringEncodedAsUrlParameter:unescapedParameters];

または:

NSString * escapedParameters = [unescapedParameters stringByEncodingAsUrlParameter];

次に、適切にエスケープされたパラメーターを URL の末尾に追加します。URL 全体をエンコードすると、「http://」の部分がエンコードされてしまい、機能しません。

私はもともと上記を ASIHttpRequest からコピーしましたが、追加されたバグはすべて私のものです。

それが役立つことを願っています! 頑張ってください!!

于 2013-02-04T03:09:52.910 に答える