簡體   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