[英]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.