2012-05-08 3 views
2

不正な記号のパーセントエスケープに使用されるカテゴリメソッドに問題があります。NULLを返すCFURLCreateStringByAddingPercentEscapes

これは私が仕事のために使用していますコードです:私は上記のマッチング文字列で見つかったシンボルのいずれかの文字列なしでこのメソッドを実行し、これまで、この方法がうまく実行されると

@implementation NSString (URLEncoding) 
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding { 
    NSString *s = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)self, NULL, (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",CFStringConvertNSStringEncodingToEncoding(encoding)); 
    NSLog(@"S: %@, Self: %@", s, self); 
    return [s autorelease]; 
} 
@end 

と同じ文字列が返されます。例えば

私は@"test"のような文字列を持っている場合、それは出力は以下となります。

S:テスト、セルフ:テスト

しかし、私が代わりに@"test&symbols"のような文字列を使用する場合には出力は以下となります。

S:ヌル、セルフ:テスト&シンボル

したがって、CFURLCreateStringByAddingPercentEscapesを使用すると何か問題があるようです。

&のような記号は、クエリ文字列の値として使用される文字列で発生する可能性があり、クエリ文字列を誤って解釈する可能性があります。

ここで問題が発生する可能性がありますか?

ありがとうございます!/Magnus

+0

このスレッドを見てみましょう:http://stackoverflow.com/a/730427/1228534 – graver

+0

神ああ...このため、長い一日にそれをされています。質問を削除するにはどうすればよいですか?それは、NSStringEncodingを望んでいた私のカテゴリメソッドに間違ったタイプのエンコーディング(CF)を送り出したことが判明しました。*机の上に頭を打つ* – Mange

+0

あなたはそれを回答として投稿し、それを受け入れることができます。 –

答えて

2

私の大きな間違いを見つけた後。
私は自分の質問に答えるように言われました。

NSStringEncodingの値をNSUTF8StringEncodingのように渡しませんでしたが、代わりにkCFStringEncodingUTF8などのCF値を渡していたのは間違っていました。

値は、エラーを引き起こしたCF値にするためにコンバーターを通過し、既に正しいタイプを持っていました。

ご迷惑をおかけします。

-Magnus