寫了個分類使用方法交換
iOS里面字符串轉(zhuǎn)URL的時候里面有中文就會失敗為nil等太,全部轉(zhuǎn)換可能會出問題,有#這種轉(zhuǎn)換后打不開蛮放。想統(tǒng)一處理缩抡,使用Category重寫系統(tǒng)方法,原來使用URLWithString的會直接使用新的方法轉(zhuǎn)換成功就繼續(xù)包颁,轉(zhuǎn)換失敗就轉(zhuǎn)義中文后再試瞻想。
上代碼.m文件如下:
#import "NSURL+XXX.h"
@implementation NSURL (XXX)
+(void)load
{
Method methodOld = class_getClassMethod([self class], @selector(URLWithString:));
Method methodNew = class_getClassMethod([self class], @selector(URLWithCHString:));
method_exchangeImplementations(methodOld, methodNew);
}
+(NSURL *)URLWithCHString:(NSString *)URLString
{
NSURL *url = [NSURL URLWithCHString:URLString];
if (url) {
return url;
}else{
NSString *str = [NSURL urlEncodeChineseString:URLString];
NSURL *urlCH = [NSURL URLWithCHString:str];
return urlCH;
}
}
//字符串轉(zhuǎn)換只轉(zhuǎn)碼中文,不統(tǒng)一轉(zhuǎn)換#等特殊字符會出問題
+ (NSString *)urlEncodeChineseString:(NSString *)string
{
//(unicode中文編碼范圍是0x4e00~0x9fa5)
for (int i = 0; i < string.length; i++) {
int utfCode = 0;
void *buffer = &utfCode;
NSRange range = NSMakeRange(i, 1);
BOOL b = [string getBytes:buffer maxLength:2 usedLength:NULL encoding:NSUTF16LittleEndianStringEncoding options:NSStringEncodingConversionExternalRepresentation range:range remainingRange:NULL];
if (b && (utfCode >= 0x4e00 && utfCode <= 0x9fa5)) {
NSString*bStr = [string substringWithRange:NSMakeRange(i,1)];//識別漢字
NSString *chineseStr = [bStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];//轉(zhuǎn)化
string = [string stringByReplacingOccurrencesOfString:bStr withString:chineseStr];//替換
}
}
return string;
}
@end