iOS字符串編碼與解碼方法的實(shí)現(xiàn)與調(diào)用(UrlEncode/UrlDecode)

1.本編解碼方法的功能說明

  • UrlEncode方法
    把任何參數(shù)轉(zhuǎn)換成適合放在URL中的字符串穷当。具體規(guī)則:
  1. 字母昔善,數(shù)字,連字符不變炒瘸。
  2. 空格轉(zhuǎn)換成加號(hào)淤堵。
  3. 其他所有的字符轉(zhuǎn)換成用百分號(hào)表示,并接上字符的兩位十六進(jìn)制編碼顷扩。如%2F
  • UrlDecode方法
    其功能與編碼相反

2. 字符串在編碼之前之后的效果

原字符串:

Vk/nQmguwJIN

編碼之后:

Vk%2FnQmguwJIN

解碼之后:

Vk/nQmguwJIN

3.UrlEncode/UrlDecode方法的實(shí)現(xiàn)

編碼

+(NSString*)encodeString:(NSString*)unencodedString{
    
    // CharactersToBeEscaped = @":/?&=;+!@#$()~',*";
    // CharactersToLeaveUnescaped = @"[].";
    
    NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                              (CFStringRef)unencodedString,
                                                              NULL,
                                                              (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                                              kCFStringEncodingUTF8));
    
    return encodedString;
}

解碼

//URLDEcode
+(NSString *)decodeString:(NSString*)encodedString

{
    //NSString *decodedString = [encodedString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding ];
    
    NSString *decodedString  = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,(__bridge CFStringRef)encodedString,CFSTR(""),CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
    return decodedString;
}

4.使用建議

建議自己寫個(gè)Category拐邪。比如,可以基于NSString新建一個(gè)URLEncoding類別文件隘截,類名分別為NSString+URLEncoding.h和NSString+URLEncoding.m扎阶。然后汹胃,在你需要的地方導(dǎo)入該頭文件即可。作為對(duì)比东臀,與上面的實(shí)現(xiàn)不同着饥,下面采用replaceOccurrencesOfString:方法實(shí)現(xiàn)解碼功能。

其中:
NSString+URLEncoding.h

#import <Foundation/Foundation.h>

@interface NSString (URLEncoding)

// 字符串轉(zhuǎn)碼
- (NSString*)urlEncodeString;

// 反URL編碼
- (NSString *)decodeFromPercentEscapeString;

@end

NSString+URLEncoding.m

#import "NSString+URLEncoding.h"

@implementation NSString (URLEncoding)

// 字符串編碼
- (NSString *)urlEncodeString
{
    NSString *result = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, NULL, CFSTR(":/?#[]@!$&’(){}<>*+,;="),kCFStringEncodingUTF8));
    return result;
}

// 反URL編碼
- (NSString *)decodeFromPercentEscapeString
{
    NSMutableString *outputStr = [NSMutableString stringWithString:self];
    [outputStr replaceOccurrencesOfString:@"+"
                               withString:@" "
                                  options:NSLiteralSearch
                                    range:NSMakeRange(0, [outputStr length])];
    
    return [outputStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}

5. 調(diào)用范例

在調(diào)用處的類中

#import "NSString+URLEncoding.h"

然后惰赋,調(diào)用上述方法:

[testStr urlEncodeString];

即可宰掉。

參考文獻(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市赁濒,隨后出現(xiàn)的幾起案子轨奄,更是在濱河造成了極大的恐慌,老刑警劉巖拒炎,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挪拟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡击你,警方通過查閱死者的電腦和手機(jī)玉组,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丁侄,“玉大人惯雳,你說我怎么就攤上這事∪拚希” “怎么了吨凑?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)户辱。 經(jīng)常有香客問我,道長(zhǎng)糙臼,這世上最難降的妖魔是什么庐镐? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮变逃,結(jié)果婚禮上必逆,老公的妹妹穿的比我還像新娘。我一直安慰自己揽乱,他們只是感情好名眉,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凰棉,像睡著了一般损拢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撒犀,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天福压,我揣著相機(jī)與錄音掏秩,去河邊找鬼。 笑死荆姆,一個(gè)胖子當(dāng)著我的面吹牛蒙幻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胆筒,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼邮破,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了仆救?” 一聲冷哼從身側(cè)響起决乎,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎派桩,沒想到半個(gè)月后构诚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铆惑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年范嘱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片员魏。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丑蛤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出撕阎,到底是詐尸還是另有隱情受裹,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布虏束,位于F島的核電站棉饶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏镇匀。R本人自食惡果不足惜照藻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望汗侵。 院中可真熱鬧幸缕,春花似錦、人聲如沸晰韵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雪猪。三九已至栏尚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浪蹂,已是汗流浹背抵栈。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工告材, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人古劲。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓斥赋,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親产艾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疤剑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 在此特此聲明:一下所有鏈接均來自互聯(lián)網(wǎng),在此記錄下我的查閱學(xué)習(xí)歷程闷堡,感謝各位原創(chuàng)作者的無私奉獻(xiàn) 隘膘! 技術(shù)一點(diǎn)一點(diǎn)積...
    遠(yuǎn)航的移動(dòng)開發(fā)歷程閱讀 11,077評(píng)論 12 197
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,495評(píng)論 25 707
  • 含精華 編,0 篇文章杠览,0 人關(guān)注 大家好弯菊,我是來自湖南瀏陽的自由清風(fēng)。 現(xiàn)在是思涵系統(tǒng)超成夢(mèng)小組的踱阿,我的領(lǐng)導(dǎo)人是...
    自由清風(fēng)616075閱讀 104評(píng)論 0 0
  • 2016年就快要結(jié)束了管钳,好久沒寫簡(jiǎn)書了,這次就在這里盤點(diǎn)一下今年看的書吧软舌,今年看了八十幾本書才漆,離原定的100本的目...
    飛巴閱讀 461評(píng)論 2 3