在任何网址中,您都可以使用* 等特殊字符? &安培; 〜:/ *
如果还没有,强调字符
我想要的是将任何网址转换为纯ASCII字符中最接近的网址 然后用_
替换任何剩余的spécial字符我尝试了这个看起来很有启发性的myslef,网上有很多例子,但它不起作用(例如,使用此代码,@"http://www.mélange.fr/~fermer.php?aa=10&ee=13"
中的字符“é”未转换为“e” )
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
当然无需逐个检查每个可能的特殊或重点字符。
答案 0 :(得分:3)
两个想法:
要用非重音字符替换重音字符,有几个候选字符:
您可以使用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
替换:< / p>
NSString *result = [string stringByReplacingOccurrencesOfString:@"[^a-z0-9\\.]"
withString:@"_"
options:NSRegularExpressionSearch | NSCaseInsensitiveSearch
range:NSMakeRange(0, [string length])];
这个正则表达式有许多排列可以完成同样的事情,但希望你能得到这个想法。