2013-07-18 2 views
0

모든 URL에서 * 과 같은 특수 문자를 사용할 수 있습니까? & ~/*URL을 "정규화"하여 특수 문자를 새로운 것으로 바꾸는 방법

곧하지 이미 내가 원하는 무엇 강조 문자

그것이
다음 남아있는 특별한 부르는 것들은 교체 순수한 ASCII 문자에 가까운 상당의로 모든 URL을 변환하는 것입니다 경우 by

그물을 통해 많은 예제가있는이 멋진 영감을 주려고했지만 작동하지 않습니다. 예를 들어이 코드를 사용하면 문자 "é"는 @"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

"작동하지 않는다"는 것은 무엇을 의미합니까? 입력 문자열과 예상 및 실제 출력의 예를 들려 줄 수 있습니까? –

+0

이 비 ASCII 문자는 NSString의 "stringByAddingPercentEscapesUsingEncoding : NSASCIIStringEncoding] ;; –

+0

과 같은 것을 통해 인코딩 될 수 없습니다. @MartinR : 질문에 예제를 제공합니다. 보이게하고 하단에 하나를 추가하여 더 명시 적으로 표현합니다. – Oliver

답변

3

두 생각은 : 악센트가없는 사람과 악센트 문자를 교체하려면

  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])]; 
    

    같은 것을 달성 할 수있는이 정규식의 많은 순열이 있지만 잘하면 당신은 아이디어를 얻을 수 있습니다.

+0

전체 URL에 대해 얘기하고 있습니다 – Oliver

+0

내 편집 – Oliver

+0

을 볼 수 있습니다.이 코드는 작동하지만 예제에서는 문제가 없지만 행운을 빕니다 대신 변환 된 문자를 마스터하고 싶습니다. ,이 해결책을 염두에 두자. 대안이 그것을 허용 할까? 이것은 내가 유혹을 느낀 이유였다. NSMutableCharacterSet 방법. – Oliver

관련 문제