[英]How to “normalize” an URL replacing any special characters with new ones
在任何URL中,可以有特殊字符,例如* ?。 &〜:/ *
如果沒有的話,很快就加重了字符
我想要將任何url轉換為最接近的純ASCII字符
然后用_替換所有剩余的特殊字符
我已經通過網絡上的許多示例嘗試了這種看起來令人振奮的myslef,但是它不起作用(例如,使用此代碼,字符“é”在@"http://www.mélange.fr/~fermer.php?aa=10&ee=13"
不會轉換為” e“) @"http://www.mélange.fr/~fermer.php?aa=10&ee=13"
)
NSMutableCharacterSet *charactersToKeep = [NSMutableCharacterSet alphanumericCharacterSet];
[charactersToKeep addCharactersInString:@"://&=~?"];
NSCharacterSet* charactersToRemove = [charactersToKeep invertedSet];
myNSString = [[[myNSString decomposedStringWithCanonicalMapping] componentsSeparatedByCharactersInSet:charactersToRemove] componentsJoinedByString:@""];
to start, after I will have to convert remaining special characters with _
我該如何實現?
作為一個示例(僅作為示例),我想轉換:
http://www.mélange.fr/~fermer.php?aa=10&ee=13
至
http___www.melange.fr__fermer_php_aa_10_ee_13
當然不必逐一檢查每個可能的特殊或重音字符 。
兩個想法:
要用不帶重音的字符替換帶重音的字符,有兩種選擇:
您可以使用CFStringTransform
:
NSMutableString *mutableString = [string mutableCopy]; CFStringTransform((__bridge CFMutableStringRef)mutableString, NULL, kCFStringTransformStripCombiningMarks, NO);
您可以使用dataUsingEncoding:allowLossyConversion:
NSData *data = [string dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
不知道該怎么做的字符變成?
但這有時會用多個字符替換一個字符(例如, ©
加上(C)
),而您可能想要也可能不需要。
完成此國際字符轉換后,您似乎想用下划線替換任何非字母數字字符(或句點),您可以使用帶有正則表達式的stringByReplacingOccurrencesOfString
進行此操作:
NSString *result = [string stringByReplacingOccurrencesOfString:@"[^a-z0-9\\\\.]" withString:@"_" options:NSRegularExpressionSearch | NSCaseInsensitiveSearch range:NSMakeRange(0, [string length])];
這個正則表達式有很多排列可以完成相同的事情,但希望您能理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.