0

iPhoneで入力できるすべての文字を受け入れるために、文字列をエンコードして(HTTPポストリクエストで送信する)しようとしています。

以下は、典型的な英語のデスクトップキーボードで試した文字に対して機能します

let userPassword = "password1"
let encodedPassword = userPassword.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.alphanumericCharacterSet())

ただし、á、é、í、ó、ú、ü、ñ などのアクセント付き文字は認識しません (標準の iPhone キーボードで a、e、i を押したままにするとアクセスできます)。NSCharacterSet標準の iPhone キーボードにある任意の文字またはすべての文字を含む単純な拡張機能はありますか?

編集:これが私が行っているリクエストのコードです

let username = "joe"
let password = "pássword"
let encodedUsername = username.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.alphanumericCharacterSet())
let encodedPassword = password.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.alphanumericCharacterSet())

let request = NSMutableURLRequest(URL: NSURL(string: "https://www.url.com")!)
request.HTTPMethod = "POST"
let postString = "id="+encodedUsername+"&pw="+encodedPassword
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
        data, response, error in
    ...
4

1 に答える 1

0

ユーザー入力を取得しながらこれを追加するだけで、ユーザーが特別な記号やアクセント付き文字を追加する機会がなくなり、許可された文字でエンコードする必要がなくなります:-

#define ACCEPTABLE_CHARACTERS @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_."

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
         NSCharacterSet *acceptedInput = [NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS];
        if (![[string componentsSeparatedByCharactersInSet:acceptedInput] count] > 1){
            NSLog(@"not allowed");
            return NO;
        }
        else{
            return YES;
        }
}
于 2016-01-29T08:47:44.173 に答える