ฉันจะเข้ารหัสสตริงได้อย่างไร


189

ฉันมีสตริง URL ( NSString) พร้อมช่องว่างและ&ตัวอักษร ฉันจะเข้ารหัสสตริงทั้งหมดได้อย่างไร (รวมถึง&อักขระเครื่องหมายและช่องว่าง)


1
ตรวจสอบคำถามนี้ - stackoverflow.com/questions/21403323/url-encoding-a-string/…
Akshay Nalawade

คำตอบ:


291

น่าเสียดายที่stringByAddingPercentEscapesUsingEncodingไม่สามารถใช้งานได้ 100% เสมอไป มันเข้ารหัสอักขระที่ไม่ใช่ URL แต่ปล่อยให้อักขระที่สงวนไว้ (เช่นเครื่องหมายสแลช/และเครื่องหมายแอมเปอร์แซนด์&) อยู่คนเดียว เห็นได้ชัดว่านี่เป็นข้อผิดพลาดที่ Apple รับรู้ แต่เนื่องจากพวกเขายังไม่ได้แก้ไขฉันจึงใช้หมวดหมู่นี้เพื่อเข้ารหัสสตริง url:

@implementation NSString (NSString_Extended)

- (NSString *)urlencode {
    NSMutableString *output = [NSMutableString string];
    const unsigned char *source = (const unsigned char *)[self UTF8String];
    int sourceLen = strlen((const char *)source);
    for (int i = 0; i < sourceLen; ++i) {
        const unsigned char thisChar = source[i];
        if (thisChar == ' '){
            [output appendString:@"+"];
        } else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' || 
                   (thisChar >= 'a' && thisChar <= 'z') ||
                   (thisChar >= 'A' && thisChar <= 'Z') ||
                   (thisChar >= '0' && thisChar <= '9')) {
            [output appendFormat:@"%c", thisChar];
        } else {
            [output appendFormat:@"%%%02X", thisChar];
        }
    }
    return output;
}

ใช้แบบนี้:

NSString *urlEncodedString = [@"SOME_URL_GOES_HERE" urlencode];

// Or, with an already existing string:
NSString *someUrlString = @"someURL";
NSString *encodedUrlStr = [someUrlString urlencode];

สิ่งนี้ยังใช้งานได้:

NSString *encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
                            NULL,
                            (CFStringRef)unencodedString,
                            NULL,
                            (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                            kCFStringEncodingUTF8 );

บางคนอ่านดีเกี่ยวกับเรื่อง:

ร้อยละของวัตถุประสงค์ -c iPhone เข้ารหัสสตริงหรือไม่?
การเข้ารหัส Objective-C และ Swift URL

http://cybersam.com/programming/proper-url-percent-encoding-in-ios
https://devforums.apple.com/message/15674#15674 http://simonwoodside.com/weblog/2009/4/ 22 / how_to_really_url_encode /


12
เหตุใดคุณจึงต้องใช้หมวดหมู่ที่ซับซ้อนเช่นนี้แทนที่จะปล่อยลงในCFURLCreateStringByAddingPercentEscapes ()ซึ่งคุณสามารถระบุตัวละครที่คุณต้องการหลบหนีได้อย่างชัดเจน
Lily Ballard

8
@KevinBallard เพราะฟังก์ชั่นที่ CF ทำงานในรูปแบบครบวงจร ( "หนีตัวละครเหล่านี้") และมักจะคุณต้องการที่จะทำงานในรูปแบบพิเศษ ( "ทุกอย่างที่หลบหนียกเว้นตัวละครเหล่านี้")
เดฟ DeLong


31
@DaveDeLong นั่นอาจเป็นที่ที่ฉันได้รับมา มันเป็นหมวดหมู่มาตรฐานในทุกโครงการของฉันเป็นเวลาหนึ่งปีหรือมากกว่านั้นดังนั้นฉันจินตนาการว่าคุณอาจเป็นแหล่งดั้งเดิม! ฉันได้แก้ไขข้อความเพื่อให้ดูเหมือนว่าฉันพยายามที่จะใช้เครดิตสำหรับการเขียนมัน)
chown

4
ทำไม? if (thisChar == '') {[เอาต์พุต appendString: @ "+"]; } ด้วยจากนี้ถ้ามันจะเข้ารหัสช่องว่างด้วย% 20 ผมจะคาดหวัง
คริสสตีเฟนส์

127

สิ่งนี้อาจมีประโยชน์

NSString *sampleUrl = @"http://www.google.com/search.jsp?params=Java Developer";
NSString* encodedUrl = [sampleUrl stringByAddingPercentEscapesUsingEncoding:
 NSUTF8StringEncoding];

สำหรับ iOS 7+ วิธีที่แนะนำคือ:

NSString* encodedUrl = [sampleUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

คุณสามารถเลือกชุดอักขระที่อนุญาตตามความต้องการขององค์ประกอบ URL


7
สิ่งนี้ไม่ได้เข้ารหัสตัวคั่นพารามิเตอร์อย่างถูกต้องเช่น '&', '?' ในกรณีที่คุณส่งเนื้อหาไปยัง API
Ben Lachman

'&' ไม่ใช่อักขระที่ถูกต้องสำหรับพารามิเตอร์สตริงการสืบค้น URL โปรดลองใช้ '& amp;' แทน.
Nishant

1
stringByAddingPercentEscapesUsingEncoding ถูก DEPRECATED "ใช้-stringByAddingPercentEncodingWithAllowedCharacters:แทนซึ่งจะใช้การเข้ารหัสแบบ UTF-8 ที่แนะนำเสมอและการเข้ารหัสสำหรับส่วนประกอบ URL หรือคอมโพเนนต์ย่อยที่เฉพาะเจาะจงเนื่องจากแต่ละองค์ประกอบ URL หรือส่วนประกอบย่อยมีกฎที่แตกต่างกันสำหรับอักขระที่ถูกต้อง"
Mihir Oza

89

มีการเพิ่ม API ใหม่ตั้งแต่เลือกคำตอบแล้ว ตอนนี้คุณสามารถใช้ NSURLUtilities ได้แล้ว เนื่องจากส่วนต่าง ๆ ของ URL อนุญาตให้ใช้อักขระต่างกันให้ใช้ชุดอักขระที่เกี่ยวข้อง ตัวอย่างต่อไปนี้เข้ารหัสสำหรับการรวมในสตริงการสืบค้น:

encodedString = [myString stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet];

หากต้องการแปลง '&' โดยเฉพาะคุณจะต้องลบออกจากชุดการสืบค้น URL หรือใช้ชุดอื่นเนื่องจากอนุญาตให้ใช้ & 'ในการสืบค้น URL:

NSMutableCharacterSet *chars = NSCharacterSet.URLQueryAllowedCharacterSet.mutableCopy;
[chars removeCharactersInRange:NSMakeRange('&', 1)]; // %26
encodedString = [myString stringByAddingPercentEncodingWithAllowedCharacters:chars];

1
ฉันใช้เวลาสักครู่เพื่อค้นหาว่าคุณหมายถึงอะไรโดย "ใช้ NSURLUtilities" - แต่ตอนนี้ฉันเห็นแล้วว่าเป็นชื่อหมวดหมู่ของ NSString ที่ Apple กำหนดวิธีการใหม่นี้ใน iOS 7 และ OS X 10.9
Richard Venable

1
มีคำตอบที่ซับซ้อนมากขึ้นเช่นนี้: stackoverflow.com/a/20271177/456366
Richard Venable

ได้. นอกจากนี้ยังถูกระบุว่าเป็น NSURLUtilities ในรายการ API ใหม่ที่เผยแพร่
Peter DeWeese

แน่นอนว่า '&' อนุญาตในสตริงข้อความค้นหาดังนั้นฉันจะแก้ไขคำตอบโดยใช้ลิงก์ของ Richard
Peter DeWeese

3
NSMakeRange('&', 1)ไม่ทำงานใน Swift เนื่องจาก Swift ไม่อนุญาตให้แปลงเป็นถ่านโดยไม่แฮ็ก ในการใช้โซลูชันนี้ในรหัส Swift ให้ใช้removeCharactersInString("&")แทน.removeCharactersInRange(...)
cbh2000

16

ตัวอย่าง Swift 2.0 (เข้ากันได้กับ iOS 9)

extension String {

  func stringByURLEncoding() -> String? {

    let characters = NSCharacterSet.URLQueryAllowedCharacterSet().mutableCopy() as! NSMutableCharacterSet

    characters.removeCharactersInString("&")

    guard let encodedString = self.stringByAddingPercentEncodingWithAllowedCharacters(characters) else {
      return nil
    }

    return encodedString

  }

}

2
@AlecThomas คุณดูเหมือนจะต้องกระโดดผ่านห่วงไม่กี่ที่จะได้รับที่นี่ว่าทำไมมันดีกว่าที่จะซ่อนมันไว้ในส่วนขยาย
Oliver Atkinson

@OliverAtkinson - สำหรับฉัน Int (String (อักขระ ("&"))) จะคืนค่าเป็นศูนย์เท่าที่ควร แทนที่จะเป็นอักขระเอาออกตัวอักษรInString ("&")
ambientlight

14

อัพเดต iOS 7

NSString *encode = [string stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

NSString *decode = [encode stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

สิ่งนี้ไม่ถูกต้อง คุณจะต้องหลีกเลี่ยงส่วนต่าง ๆ ของ URL ต่างกัน stackoverflow.com/questions/3423545/…
Steve Moser

จริง ๆ แล้วมันขึ้นอยู่กับเซิร์ฟเวอร์ของคุณสำหรับตัวละครที่ได้รับอนุญาตนี่คือตัวอย่างของฉันในเซิร์ฟเวอร์ที่ฉันใช้มันเป็นชุดตัวอักษรและตัวเลขที่อนุญาตเท่านั้นคุณสามารถเปลี่ยนเป็นอักขระเฉพาะเพื่อตอบสนองความต้องการของคุณ
Underdog

1
คำถามถามเกี่ยวกับการเข้ารหัสอักขระ '&'
Steve Moser

8

ฉันเลือกที่จะใช้การCFURLCreateStringByAddingPercentEscapesโทรตามที่กำหนดโดยคำตอบที่ยอมรับอย่างไรก็ตามใน XCode รุ่นล่าสุด (และ IOS) มันทำให้เกิดข้อผิดพลาดดังนั้นควรใช้สิ่งต่อไปนี้แทน:

NSString *apiKeyRaw = @"79b|7Qd.jW=])(fv|M&W0O|3CENnrbNh4}2E|-)J*BCjCMrWy%dSfGs#A6N38Fo~";

NSString *apiKey = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)apiKeyRaw, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8));

มันไม่ได้เข้ารหัสพื้นที่ ตัวอย่าง @ "สตริงสตริง" และ @ "สตริง & สตริง" ได้รับการเข้ารหัสอย่างถูกต้อง โปรดแจ้งให้เราทราบว่าข้อมูลของคุณเหมือนกัน
Yogesh Lolusare

2
สำหรับฉันส่วนใหญ่เวลาที่ใช้ในการแก้ปัญหานี้เป็นช่วงเวลาการปฏิเสธที่ฉันปฏิเสธที่จะเชื่อว่ากรอบไม่ประกอบด้วยสิ่งที่ชื่อคล้ายกับ 'urlencode' ที่ทำสิ่งนี้โดยไม่ต้องยุ่งไปรอบ ๆ ..
dancl

6

ลองใช้stringByAddingPercentEncodingWithAllowedCharactersวิธีการกับ[NSCharacterSet URLUserAllowedCharacterSet]มันจะครอบคลุมทุกกรณี

วัตถุประสงค์ C

NSString *value = @"Test / Test";
value = [value stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLUserAllowedCharacterSet]];

รวดเร็ว

var value = "Test / Test"
value.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLUserAllowedCharacterSet())

เอาท์พุต

Test%20%2F%20Test


6

หลังจากอ่านคำตอบทั้งหมดสำหรับหัวข้อนี้และยอมรับ( ผิด ) ฉันต้องการเพิ่มการมีส่วนร่วมของฉัน

หากเป้าหมายคือ iOS7 + และในปี 2560 ควรเนื่องจาก XCode ทำให้ยากที่จะส่งมอบความเข้ากันได้กับ iOS8 วิธีที่ดีที่สุดเธรดที่ปลอดภัยรวดเร็วและ amd จะรองรับ UTF-8 อย่างเต็มที่ดังนี้:

(รหัส C วัตถุประสงค์)

@implementation NSString (NSString_urlencoding)

- (NSString *)urlencode {
    static NSMutableCharacterSet *chars = nil;
    static dispatch_once_t pred;

    if (chars)
        return [self stringByAddingPercentEncodingWithAllowedCharacters:chars];

    // to be thread safe
    dispatch_once(&pred, ^{
        chars = NSCharacterSet.URLQueryAllowedCharacterSet.mutableCopy;
        [chars removeCharactersInString:@"!*'();:@&=+$,/?%#[]"];
    });
    return [self stringByAddingPercentEncodingWithAllowedCharacters:chars];
}
@end

สิ่งนี้จะขยาย NSString จะไม่รวมอักขระที่ต้องห้าม RFC รองรับ UTF-8 อักขระและให้คุณใช้สิ่งต่อไปนี้:

NSString *myusername = "I'm[evil]&want(to)break!!!$->àéìòù";
NSLog(@"Source: %@ -> Dest: %@", myusername, [myusername urlencode]);

ที่จะพิมพ์บนคอนโซลการดีบักของคุณ:

แหล่งที่มา: ฉัน [ชั่วร้าย] & ต้องการ (to) เบรค !!! $ -> àéìòù -> ปลายทาง: I% 27m% 5Bevil% 5D% 26 ต้องการ% 28 ถึง% 29 เบรค% 21% 21% 21% 21- 24% 3E% C3 % A0% C3% A9% C3% AC% C3% B2% C3% B9

... ทราบด้วยการใช้ dispatch_once เพื่อหลีกเลี่ยงการเริ่มต้นหลายครั้งในสภาพแวดล้อมแบบมัลติเธรด


5

นี่คือวิธีการที่ยืดหยุ่นพร้อมใช้งานสำหรับการผลิตในSwift 5.x :

public extension CharacterSet {

    static let urlQueryParameterAllowed = CharacterSet.urlQueryAllowed.subtracting(CharacterSet(charactersIn: "&?"))

    static let urlQueryDenied           = CharacterSet.urlQueryAllowed.inverted()
    static let urlQueryKeyValueDenied   = CharacterSet.urlQueryParameterAllowed.inverted()
    static let urlPathDenied            = CharacterSet.urlPathAllowed.inverted()
    static let urlFragmentDenied        = CharacterSet.urlFragmentAllowed.inverted()
    static let urlHostDenied            = CharacterSet.urlHostAllowed.inverted()

    static let urlDenied                = CharacterSet.urlQueryDenied
        .union(.urlQueryKeyValueDenied)
        .union(.urlPathDenied)
        .union(.urlFragmentDenied)
        .union(.urlHostDenied)


    func inverted() -> CharacterSet {
        var copy = self
        copy.invert()
        return copy
    }
}



public extension String {
    func urlEncoded(denying deniedCharacters: CharacterSet = .urlDenied) -> String? {
        return addingPercentEncoding(withAllowedCharacters: deniedCharacters.inverted())
    }
}

ตัวอย่างการใช้งาน:

print("Hello, World!".urlEncoded()!)
print("You&Me?".urlEncoded()!)
print("#Blessed 100%".urlEncoded()!)
print("Pride and Prejudice".urlEncoded(denying: .uppercaseLetters)!)

เอาท์พุท:

Hello,%20World!
You%26Me%3F
%23Blessed%20100%25
%50ride and %50rejudice

โปรดระบุความคิดเห็นที่อธิบายถึงสาเหตุของ downvotes ของคุณดังนั้นฉันจึงรู้วิธีเขียนคำตอบที่ดีกว่าในอนาคต
Ben

4

ใช้ NSURLComponents เพื่อเข้ารหัสพารามิเตอร์ HTTP GET:

    var urlComponents = NSURLComponents(string: "https://www.google.de/maps/")!
    urlComponents.queryItems = [
        NSURLQueryItem(name: "q", value: String(51.500833)+","+String(-0.141944)),
        NSURLQueryItem(name: "z", value: String(6))
    ]
    urlComponents.URL     // returns https://www.google.de/maps/?q=51.500833,-0.141944&z=6

http://www.ralfebert.de/snippets/ios/encoding-nsurl-get-parameters/


1
มันไม่ได้เข้ารหัสแอมป์แซนด์, สแลชหรืออัฒภาค
Fábio Oliveira

4

รหัสนี้ช่วยฉันในการเข้ารหัสอักขระพิเศษ

NSString* encPassword = [password stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet alphanumericCharacterSet]];

3

รหัส swift ตามคำตอบ objc ของchownในหัวข้อนี้

extension String {
    func urlEncode() -> String {
        return CFURLCreateStringByAddingPercentEscapes(
            nil,
            self,
            nil,
            "!*'();:@&=+$,/?%#[]",
            CFStringBuiltInEncodings.UTF8.rawValue
        )
    }
}

4
ฟังก์ชันนี้เลิกใช้แล้วใน iOS 9 :(
Oliver Atkinson

3

ในSwift 3โปรดลองด้านล่าง:

let stringURL = "YOUR URL TO BE ENCODE";
let encodedURLString = stringURL.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
print(encodedURLString)

ตั้งแต่stringByAddingPercentEscapesUsingEncodingเข้ารหัสอักขระที่ไม่ใช่ URL แต่ออกจากอักขระที่สงวนไว้ (เช่น!*'();:@&=+$,/?%#[]) คุณสามารถเข้ารหัส URL เช่นรหัสต่อไปนี้:

let stringURL = "YOUR URL TO BE ENCODE";
let characterSetTobeAllowed = (CharacterSet(charactersIn: "!*'();:@&=+$,/?%#[] ").inverted)
if let encodedURLString = stringURL.addingPercentEncoding(withAllowedCharacters: characterSetTobeAllowed) {
    print(encodedURLString)
}

2

ในสวิฟต์ 3:

// exclude alpha and numeric == "full" encoding
stringUrl = stringUrl.addingPercentEncoding(withAllowedCharacters: .alphanumerics)!;

// exclude hostname and symbols &,/ and etc
stringUrl = stringUrl.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!;

2

คำแนะนำของ Apple ในบันทึกย่อประจำรุ่น 10.11 คือ:

หากคุณต้องการเข้ารหัสสตริงสตริง URL ทั้งหมดคุณสามารถใช้รหัสนี้เพื่อเข้ารหัส NSString ที่ตั้งใจให้เป็น URL (ใน urlStringToEncode):

NSString *percentEncodedURLString =
  [[NSURL URLWithDataRepresentation:[urlStringToEncode dataUsingEncoding:NSUTF8StringEncoding] relativeToURL:nil] relativeString];

ดูเหมือนจะไม่ทำงานตัวอักษรเช่น & ยังเหลืออยู่คนเดียว
kjyv

1

ในกรณีของฉันที่องค์ประกอบสุดท้ายคือตัวอักษรภาษาอาหรับฉันทำสิ่งต่อไปนี้ในSwift 2.2:

extension String {

 func encodeUTF8() -> String? {

    //If I can create an NSURL out of the string nothing is wrong with it
    if let _ = NSURL(string: self) {

        return self
    }

    //Get the last component from the string this will return subSequence
    let optionalLastComponent = self.characters.split { $0 == "/" }.last


    if let lastComponent = optionalLastComponent {

        //Get the string from the sub sequence by mapping the characters to [String] then reduce the array to String
        let lastComponentAsString = lastComponent.map { String($0) }.reduce("", combine: +)


        //Get the range of the last component
        if let rangeOfLastComponent = self.rangeOfString(lastComponentAsString) {
            //Get the string without its last component
            let stringWithoutLastComponent = self.substringToIndex(rangeOfLastComponent.startIndex)


            //Encode the last component
            if let lastComponentEncoded = lastComponentAsString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.alphanumericCharacterSet()) {


            //Finally append the original string (without its last component) to the encoded part (encoded last component)
            let encodedString = stringWithoutLastComponent + lastComponentEncoded

                //Return the string (original string/encoded string)
                return encodedString
            }
        }
    }

    return nil;
}
}

การใช้งาน:

let stringURL = "http://xxx.dev.com/endpoint/nonLatinCharacters"

if let encodedStringURL = stringURL.encodeUTF8() {

    if let url = NSURL(string: encodedStringURL) {

      ...
    }

} 

1
-(NSString *)encodeUrlString:(NSString *)string {
  return CFBridgingRelease(
                    CFURLCreateStringByAddingPercentEscapes(
                        kCFAllocatorDefault,
                        (__bridge CFStringRef)string,
                        NULL,
                        CFSTR("!*'();:@&=+$,/?%#[]"),
                        kCFStringEncodingUTF8)
                    );
}

ตามบล็อกต่อไปนี้


แต่เลิกใช้แล้วใน iOS 9 รหัสที่อัปเดตสำหรับสิ่งนี้คืออะไร
Sujit Nachan

1

คำตอบมากมาย แต่ไม่ได้ผลสำหรับฉันดังนั้นฉันจึงลองทำสิ่งต่อไปนี้:

fun simpleServiceCall(for serviceUrl: String, appendToUrl: String) { 
    let urlString: String = serviceUrl + appendToUrl.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)!     

    let finalUrl = URL(string: urlString)!

    //continue to execute your service call... 
}

หวังว่ามันจะช่วยใครซักคน ขอบคุณ


0

สำหรับพารามิเตอร์แบบสอบถามที่เข้ารหัสรูปแบบ www แต่ละรายการฉันทำหมวดหมู่ใน NSString:

- (NSString*)WWWFormEncoded{
     NSMutableCharacterSet *chars = NSCharacterSet.alphanumericCharacterSet.mutableCopy;
     [chars addCharactersInString:@" "];
     NSString* encodedString = [self stringByAddingPercentEncodingWithAllowedCharacters:chars];
     encodedString = [encodedString stringByReplacingOccurrencesOfString:@" " withString:@"+"];
     return encodedString;
}

0

// นี่คือโดยไม่ต้องทดสอบ

NSMutableCharacterSet* set = [[NSCharacterSet alphanumericCharacterSet] mutableCopy];
[set addCharactersInString:@"-_.~"];
NSString *encode = [test stringByAddingPercentEncodingWithAllowedCharacters:set];

0

ฉันประสบปัญหาที่คล้ายกันผ่านสตริงที่ซับซ้อนเป็นพารามิเตอร์ POST สตริงของฉันสามารถมีอักขระเอเชียเว้นวรรคเครื่องหมายคำพูดและอักขระพิเศษทุกประเภท วิธีแก้ปัญหาที่ฉันพบในที่สุดก็คือการแปลงสตริงของฉันให้เป็นชุดของยูนิโค้ดที่ตรงกันเช่น "Hu0040Hu0020Hu03f5 .... " โดยใช้ [NSString stringWithFormat: @ "Hu% 04x", [string characterAtIndex: i] เพื่อรับ Unicode จากแต่ละตัว ตัวอักษรในสตริงเดิม เช่นเดียวกันสามารถทำได้ใน Java

สตริงนี้สามารถส่งผ่านได้อย่างปลอดภัยเป็นพารามิเตอร์ POST

ที่ฝั่งเซิร์ฟเวอร์ (PHP) ฉันเปลี่ยน "H" ทั้งหมดเป็น "\" และฉันส่งสตริงผลลัพธ์เป็น json_decode ขั้นตอนสุดท้ายคือการหลีกเลี่ยงคำพูดเดียวก่อนที่จะเก็บสตริงลงใน MySQL

วิธีนี้ฉันสามารถเก็บสตริง UTF8 ใด ๆ บนเซิร์ฟเวอร์ของฉัน


0

อันนี้ใช้ได้สำหรับฉัน

func stringByAddingPercentEncodingForFormData(plusForSpace: Bool=false) -> String? {
    let unreserved = "*-._"
    let allowed = NSMutableCharacterSet.alphanumericCharacterSet()
    allowed.addCharactersInString(unreserved)

    if plusForSpace {
        allowed.addCharactersInString(" ")
    }

    var encoded = stringByAddingPercentEncodingWithAllowedCharacters(allowed)
    if plusForSpace {
        encoded = encoded?.stringByReplacingOccurrencesOfString(" ",
                                                                withString: "+")
    }
    return encoded
}

ฉันพบฟังก์ชันข้างต้นจากลิงก์นี้: http://useyourloaf.com/blog/how-to-percent-encode-a-url-string/

นอกจากนี้คุณยังสามารถใช้ฟังก์ชั่นนี้ได้ด้วยส่วนขยายที่รวดเร็ว โปรดแจ้งให้เราทราบหากมีปัญหาใด ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.