パスワードに特殊な文字があるIOSはどのようにIOSのURLに中国語のパラメータが含まれている問題を処理します
2078 ワード
urlは26文字の英字、数字、および少数の特殊文字をサポートするため、urlに標準url以外の文字が含まれている場合は符号化する必要があります.iOSでは、関数stringByAddingPercentEscapesUsingEncodingが中国語といくつかの特殊文字を符号化していますが、stringByAddingPercentEscapesUsingEncodingの機能は完全ではなく、いくつかの特殊な文字に対して無効です.
NSStringに中国語文字が含まれていればNSURLに変換して得られる値はnilであり、stringByAddingPercentEscapesUsingEncoding:NSUTF 8 StringEncodingで解決できる.コードは以下の通りである.
NSString *str = [NSString stringWithUTF8String:surl.c_str()]; str = @"http://218.21.213.10/MobileOA/TIFF/鄂安弁公室は45日、2012年の全市安全生産相対制御指標の下達に関する通知を出した.jpg"; str = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *imageUrl = [NSURL URLWithString:str]; UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageUrl]];
中間にstr=[str stringByAddingPercentEscapesUsingEncoding:NSUTF 8 StringEncoding];この行はimageUrlがnil
例えばリクエスト」http://m.xxx.com/login.action?username=liyong&psw=&123&time=20120723「このようなurlリクエストの場合、その中のパスワード部分には特殊文字"&123"が含まれているため、urlは分割パラメータのフラグとみなされ、パラメータは誤って次のように分割されます.
username=liyong,psw=空,123=空,time=20120723
解決策:
そのため、特殊文字のパスワードを正しく渡すには、パスワードについて次のような処理が必要です.
password = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef) password,NULL,(CFStringRef) @"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8);
注意:このようなencodingはparamsの内容に対してしかできません.url全体に対してこのようにしないでください.
このときパスワードは「&123」です.「&」が「&」に変換されるので、特殊文字付きのパスワードを渡すことができます.
注:ASIHttpRequestを使っています.
それをカプセル化し,完全なurl符号化関数を提供する.
特に、encodeURLはurl内のcomponent符号化にのみ使用でき、url全体を符号化するには使用できません.
NSStringに中国語文字が含まれていればNSURLに変換して得られる値はnilであり、stringByAddingPercentEscapesUsingEncoding:NSUTF 8 StringEncodingで解決できる.コードは以下の通りである.
NSString *str = [NSString stringWithUTF8String:surl.c_str()]; str = @"http://218.21.213.10/MobileOA/TIFF/鄂安弁公室は45日、2012年の全市安全生産相対制御指標の下達に関する通知を出した.jpg"; str = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *imageUrl = [NSURL URLWithString:str]; UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageUrl]];
中間にstr=[str stringByAddingPercentEscapesUsingEncoding:NSUTF 8 StringEncoding];この行はimageUrlがnil
例えばリクエスト」http://m.xxx.com/login.action?username=liyong&psw=&123&time=20120723「このようなurlリクエストの場合、その中のパスワード部分には特殊文字"&123"が含まれているため、urlは分割パラメータのフラグとみなされ、パラメータは誤って次のように分割されます.
username=liyong,psw=空,123=空,time=20120723
解決策:
そのため、特殊文字のパスワードを正しく渡すには、パスワードについて次のような処理が必要です.
password = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef) password,NULL,(CFStringRef) @"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8);
注意:このようなencodingはparamsの内容に対してしかできません.url全体に対してこのようにしないでください.
このときパスワードは「&123」です.「&」が「&」に変換されるので、特殊文字付きのパスワードを渡すことができます.
注:ASIHttpRequestを使っています.
それをカプセル化し,完全なurl符号化関数を提供する.
NSString* encodeURL(NSString* dString ){ NSString* escapedUrlString= (NSString*) CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)dString, NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8 ); escapedUrlString = [escapedUrlString stringByAddingPercentEscapesUsingEncoding:kCFStringEncodingUTF8];
return [escapedUrlString autorelease]; }
特に、encodeURLはurl内のcomponent符号化にのみ使用でき、url全体を符号化するには使用できません.