1. 程式人生 > >iOS開發中Objective-C 對 URL的URLEncode(編碼)與URLDecode(解碼)

iOS開發中Objective-C 對 URL的URLEncode(編碼)與URLDecode(解碼)

廢話不多說,直接上程式碼。

<pre name="code" class="objc">
//
//  NSString+URL.h
//
//  Created by aidong on 15/5/8.
//  Copyright (c) 2015年 aidong. All rights reserved.
//

/**
 *  url字串中具有特殊功能的特殊字元的字串,或者中文字元,作為引數用GET方式傳遞時,需要用urlencode處理一下。
 *
 *  例如:在 iOS 程式訪問 HTTP 資源時,像拼出來的 http://unmi.cc?p1=%+&sd f&p2=中文,其中的中文、特殊符號&%和空格都必須進行轉譯才能正確訪問。
 */

/**
 *  呼叫示例:
        引入標頭檔案:NSString+URL.h
 
        // URLEncode
        NSString *unencodedString = @"cc?p1=%+&sd f&p";
        NSString *encodedString = [unencodedString URLEncodedString];
 
        // URLDecode
        NSString *undecodedString = @"%25+&sd%20&p2=%E4%B8%AD%E6%96%87";
        NSString *decodedString = [undecodedString URLDecodedString];
 */

#import <Foundation/Foundation.h>

@interface NSString (URL)

/**
 *  URLEncode
 */
- (NSString *)URLEncodedString;

/**
 *  URLDecode
 */
-(NSString *)URLDecodedString;

@end
//
//  NSString+URL.m
//
//  Created by aidong on 15/5/8.
//  Copyright (c) 2015年 aidong. All rights reserved.
//

#import "NSString+URL.h"

@implementation NSString (URL)

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

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

@end


相關推薦

iOS開發Objective-C URL的URLEncode編碼URLDecode解碼

廢話不多說,直接上程式碼。 <pre name="code" class="objc">// // NSString+URL.h // // Created by aidong on 15/5/8. // Copyright (c) 2015年 aido

iOS開發筆記--Objective-C根據函式名呼叫函式

Objective-C中呼叫函式的方法是“訊息傳遞”,這個和普通的函式呼叫的區別是,你可以隨時對一個物件傳遞任何訊息,而不需要在編譯的時候宣告這些方法。所以Objective-C可以在runtime的時候傳遞訊息。 主要用到:SEL和@selector,當然還有perf

iOS開發筆記--Objective-C實現多繼承

我們都知道objective C不能像C++一樣支援多繼承,但是在OC的使用經常會碰到需要使用多繼承的情況。例如,ClassA中有methodA,ClassB中methodB,而現在需要使用這兩個類中的方法。如何按照C++的程式設計思路,毫無疑問採用多繼承就搞定

iOS開發Objective-c的MD5/SHA1加密演算法的實現

Objective-c實現MD5和SHA1演算法相對還是比較簡單的,可以直接呼叫系統的C/C++共享庫來實現呼叫 MD5即Message Digest Algorithm 5(資訊-摘要演算法 5),用於確保資訊傳輸完整一致。是計算機廣泛使用的雜湊演算法之一 SHA即Se

iOS開發如何繞過第三方SDKBundleID的檢驗

在開發中有些第三方SDK會對BundleID做校驗。 比如高德地圖如果BundleID沒有註冊就不能獲取經緯度及反地理編碼。 比如Fido就不能使用其生物識別開通驗證功能。 但是測試的包的BundleID由於某些功能限制或企業證書限制不能使用註冊過的BundleID打包

iOS開發-Object-C獲取手機裝置資訊UIDevice

一、獲取UiDevice裝置資訊 // 獲取裝置名稱 NSString *name = [[UIDevice currentDevice] name]; // 獲取裝置系統名稱 NSString *systemName = [[UIDevice currentDevice] systemName

iOS開發的記憶體分配堆和棧

程序的記憶體分割槽 所有程序(執行的程式)都必須佔用一定數量的記憶體,它或是用來存放從磁碟載入的程式程式碼,或是存放取自使用者輸入的資料等等。不過程序對這些記憶體的管理方式因記憶體用途不一而不盡相同,有些記憶體是事先靜態分配和統一回收的,而有些卻是按需要動態分配和回收的

完美解決ios開發兩個.framework檔案.o檔案衝突的問題linker command failed with exit code 1 (use -v to see invocation

專案中使用到XYPrinter.framework和Printer.framework中的兩個.o檔案有衝突, 查了資料通過拆分XYPrinter.framework刪除其中衝突的.o檔案,然後重新生成靜態庫, 解決了問題. 步驟如下: 新建一個資料夾resolveConfli

iOS開發支付寶支付的整合其實很簡單

最近專案中要使用支付寶支付,記得之前整合支付寶支付是挺麻煩的一件事,可這次整合支付寶支付卻順利、方便了許多,感謝支付寶開放平臺的技術人員將整合文件寫的越來越方便我們這些開發人員使用。先附上支付寶支付整合的官方文件https://docs.open.alipay.com/20

關於iOS開發圖片處理的一些積累CoreGraphic、CoreImage、GPUImage、OpenGL

Core Image 前言 貌似公司最近的專案都是和圖片處理有關,拍拍專案中需要將圖片處理成buffer傳到影象匹配拼接演算法中,需要從原圖中摳出一定範圍的影象再貼到新的背景圖中,需要對靜態圖片進行濾鏡操作等等,所以對這方面接觸的相對多一些。

iOS開發null的處理

補充一個知識 NULL nil Nil NSNull的去唄 標識 值 含義 NULL (void *)0 C指標的字面零值 nil

IOS開發,SVN如何恢復到某一個版本以Cornerstone為例

Cornerstone是mac作業系統上一款比較流行的SVN版本管理工具。 如何恢復到某一版本呢? 1。選中你要恢復的工程 2.點選“Working Copy”--->>"Revert..."。 3. 選擇你要恢復的版本號,然後點選“Revert”。 4.

Objective-C之Autorelease Pool底層實現原理記錄雙向連結串列以及在Runloop是如何參與進去的

最近需要重新整理知識點備用,把一些重要的原理都搞了一遍 前言 int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, a

iOS開發JSON解析資料的處理

在網上看到一個例子,對JSON解析出來的資料處理的方法非常簡單,而且通用,把我對它理解的思路寫一下。 首先介紹下JSON解析,JSON解析出來的資料只有陣列和物件兩種結構。 objective - c中用字典來儲存物件資訊。key值對應物件名字,value值對應物件的值。在

IOS開發呼叫傳送Email的方法

IOS系統框架提供的兩種傳送Email的方法:openURL 和 MFMailComposeViewController。藉助這兩個方法,我們可以輕鬆的在應用里加入如使用者反饋這類需要傳送郵件的功能。 1.openURL 使用openURL呼叫系統郵箱客戶端是我們在

ios 開發的日期和時間處理

NSDate儲存的是世界標準時(UTC),輸出時需要根據時區轉換為本地時間 Dates         NSDate類提供了建立date,比較date以及計算兩個date之間間隔的功能。Date物件是不可改變的。         如果你要建立date物件並表示當前日期,你可以alloc一個NSDate物件並

iOS 開發關於時間顯示問題今天/昨天/前天/星期幾/具體日期

開發中關於時間顯示問題(今天/昨天/前天/星期幾/具體日期) 以今天為基準,顯示 今天/昨天/前天(昨天12:12) 離今天一週之內的顯示 星期幾(星期四) 離今天一週之外的顯示 具體日期(15-09-05 12:33) 為了直觀方便,直接上程式碼,

iOS開發陣列元素進行排序

直接上程式碼, 請看: // // ViewController.m // 陣列排序 // // Created by Wangjunling on 16/4/12. // Copyright © 2016年 Wangjunling. All rights rese

iOS開發記憶體管理的一點總結理解

做iOS開發也已經有兩年的時間,覺得有必要沉下心去整理一些東西了,特別是一些基礎的東西,雖然現在有ARC這種東西,但是我一直也沒有去用過,個人覺得對記憶體操作的理解是衡量一個程式設計師成熟與否的一個標準。好了,閒話不說,下面進入正題。 眾所周知,ObjectiveC的記憶體

iOS開發請求資料出現的一些簡單處理

這裡呢是整理的一位老鳥的東西,好東西得分享 大致實現思路就是迴圈便利做比較,如果發現是NSNull型別的就把值改為空字串;這樣的好處就是當資料請求回來,刪除一下資料裡面為<null>型別的東西,避免在直接取的時候產生程式崩潰問題; 兩個方法,一個返回NSA