2012-04-12 69 views
8

我使用這個代碼片段編碼字符與POST請求友好:逃生行情在Objective-C

NSString *unescaped = [textField text]; 
    NSString *escapedString = (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(
                        NULL, 
                        (__bridge_retained CFStringRef)unescaped, 
                        NULL, 
                        (CFStringRef)@"!*'();:@&=+$,/?%#[]", 
                        kCFStringEncodingUTF8); 

偉大的工程,但不加逃逸引號:"

如何在IOS中轉義引號?

回答

15

我覺得我沒有正確的字的問題。

我需要從[textField text]接收用戶輸入的NSString,並確保如果字符串中有引號,它們會正確轉義以便通過POST語句發送。

我的解決辦法是:

unescaped = [unescaped stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""]; 

感謝

+1

爲什麼不使用NSRegularExpression的」escapedPatternForString:「類方法? – Manoj 2014-12-09 19:00:11

0

嘗試使用\「而不是使用」直接...

特殊字符,如行情,斜線和其他需要\使該字符刪除其特殊的功能。

1

行情將與\"一起逃脫。

如:

(CFStringRef)@"I'm an \"example\"" 
+0

我知道這一點,我想讓你知道如何獲取用戶輸入'''並將其更改爲:'\「' – Moe 2012-04-12 09:19:25

3

首先,你不想在你的投用__bridge_retainedCFStringRef。只需使用__bridge

其次,您不必通過字符串替換手動轉義報價。在致電CFURLCreateStringByAddingPercentEscapes()時,只需將引號字符添加到要引用的字符集。像這樣:

NSString *unescaped = [textField text]; 
NSString *escapedString = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, 
                        (__bridge CFStringRef)unescaped, 
                        NULL, 
                        CFSTR("!*'();:@&=+$,/?%#[]\""), 
                        kCFStringEncodingUTF8)); 

(除了添加報價設定的,我改用CFBridgingRelease()而非__bridge_transfer造型,因爲我覺得它更清楚它滿足所有CF「創建」功能需要的感覺對應的「釋放」。此外,我改變了使用@""直接轉換爲CFStringRefCFSTR("")文字。)