要正確地對您的參數進行網址編碼,您需要將每個名稱和值轉換爲UTF-8,然後URL分別對每個名稱和值進行編碼,然後使用'='和名稱 - 值對將名稱與值相加'& 」。
我通常會發現將所有參數放在NSDictionary中更容易,然後從字典中構建查詢字符串。這裏,我使用的這樣做的類別:
// file NSDictionary+UrlEncoding.h
#import <Cocoa/Cocoa.h>
@interface NSDictionary (UrlEncoding)
-(NSString*) urlEncodedString;
@end
// file NSDictionary+UrlEncoding.m
#import "NSDictionary+UrlEncoding.h"
// private helper function to convert any object to its string representation
static NSString *toString(id object) {
return [NSString stringWithFormat: @"%@", object];
}
// private helper function to convert string to UTF-8 and URL encode it
static NSString *urlEncode(id object) {
NSString *string = toString(object);
return [string stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
}
@implementation NSDictionary (UrlEncoding)
-(NSString*) urlEncodedString {
NSMutableArray *parts = [NSMutableArray array];
for (id key in self) {
id value = [self objectForKey: key];
NSString *part = [NSString stringWithFormat: @"%@=%@",
urlEncode(key), urlEncode(value)];
[parts addObject: part];
}
return [parts componentsJoinedByString: @"&"];
}
@end
的方法,建立通過URL調用parts
名稱 - 值對的陣列編碼每個鍵和值,然後用「=」一起連接它們。然後parts
陣列中的部件與'&'字符連接在一起。
因此,對於你的例子:
#import "NSDictionary+UrlEncoding.h"
// ...
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
[parameters setValue: @"t" forKey: @"client"];
[parameters setValue: @"auto" forKey: @"sl"];
[parameters setValue: destinationLanguage forKey: @"tl"];
[parameters setValue: text forKey: @"text"];
NSString *urlString = [@"/translate_a/t?" stringByAppendingString: [parameters urlEncodedString]];
夫婦無關點:(1)確保你釋放你有什麼allocked,ESP。如果你不使用GC或者你正在編寫一個框架。 (2)您應該使用谷歌的翻譯API,而不是剽竊他們的網站:http://code.google.com/apis/ajaxlanguage/documentation/ – 2009-02-21 15:49:53
從技術上講,這不是添加HTML實體;它會爲非法URI字符添加百分比轉義 – sbooth 2009-02-21 19:10:18