繁体   English   中英

如何“规范化” URL用新的字符替换任何特殊字符

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

当然不必逐一检查每个可能的特殊或重音字符

两个想法:

  1. 要用不带重音的字符替换带重音的字符,有两种选择:

    • 您可以使用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) ),而您可能想要也可能不需要。

  2. 完成此国际字符转换后,您似乎想用下划线替换任何非字母数字字符(或句点),您可以使用带有正则表达式的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM