Подтвердить что ты не робот

Преобразование и в & in Objective-C

У меня есть строка URL в следующем формате.

http://myserver.com/_layouts/feed.aspx?xsl=4&web=%2F&page=dda3fd10-c776-4d69-8c55-2f1c74b343e2&wp=476f174a-82df-4611-a3df-e13255d97533

Я хочу заменить & на & в приведенном выше URL-адресе. Мой результат должен быть:

http://myserver.com/_layouts/feed.aspx?xsl=4&web=%2F&page=dda3fd10-c776-4d69-8c55-2f1c74b343e2&wp=476f174a-82df-4611-a3df-e13255d97533

Может ли кто-нибудь опубликовать мне код, чтобы сделать это?

Спасибо

4b9b3361

Ответ 1

[urlString stringByReplacingOccurrencesOfString:@"&" withString:@"&"];

Ответ 2

Ознакомьтесь с моей категорией NSString для HTML. Вот доступные методы:

// Strips HTML tags & comments, removes extra whitespace and decodes HTML character entities.
- (NSString *)stringByConvertingHTMLToPlainText;

// Decode all HTML entities using GTM.
- (NSString *)stringByDecodingHTMLEntities;

// Encode all HTML entities using GTM.
- (NSString *)stringByEncodingHTMLEntities;

// Minimal unicode encoding will only cover characters from table
// A.2.2 of http://www.w3.org/TR/xhtml1/dtds.html#a_dtd_Special_characters
// which is what you want for a unicode encoded webpage.
- (NSString *)stringByEncodingHTMLEntities:(BOOL)isUnicode;

// Replace newlines with <br /> tags.
- (NSString *)stringWithNewLinesAsBRs;

// Remove newlines and white space from string.
- (NSString *)stringByRemovingNewLinesAndWhitespace;

Ответ 3

В iPhone SDK нет встроенной функции. Вы должны указать ошибку, которая вам нужна. В обычном Mac OS X SDK вы можете либо загрузить фрагмент в NSAttributedString как HTML и попросить его передать обычную строку, или используйте CFXMLCreateStringByUnescapingEntities().

@interface NSString (LGAdditions)
- (NSString *) stringByUnescapingEntities;
@end

@implementation NSString (LGAdditions)
- (NSString *) stringByUnescapingEntities {
  CFStringRef retvalCF = CFXMLCreateStringByUnescapingEntities(kCFAllocatorDefault, (CFStringRef)self, NULL);
  return [NSMakeCollectable(retvalCF) autorelease];
}
@end

Ответ 4

Для iOS следующий код должен работать для числовых кодов. Относительно легко распространяться на &amp;...

-(NSString*)unescapeHtmlCodes:(NSString*)input { 

NSRange rangeOfHTMLEntity = [input rangeOfString:@"&#"];
if( NSNotFound == rangeOfHTMLEntity.location ) { 
    return input;
}


NSMutableString* answer = [[NSMutableString alloc] init];
[answer autorelease];

NSScanner* scanner = [NSScanner scannerWithString:input];
[scanner setCharactersToBeSkipped:nil]; // we want all white-space

while( ![scanner isAtEnd] ) { 

    NSString* fragment;
    [scanner scanUpToString:@"&#" intoString:&fragment];
    if( nil != fragment ) { // e.g. '&#38; B'
        [answer appendString:fragment];        
    }

    if( ![scanner isAtEnd] ) { // implicitly we scanned to the next '&#'

        int scanLocation = (int)[scanner scanLocation];
        [scanner setScanLocation:scanLocation+2]; // skip over '&#'

        int htmlCode;
        if( [scanner scanInt:&htmlCode] ) {
            char c = htmlCode;
            [answer appendFormat:@"%c", c];

            scanLocation = (int)[scanner scanLocation];
            [scanner setScanLocation:scanLocation+1]; // skip over ';'

        } else {
            // err ? 
        }
    }

}

return answer;

}

Некоторый код единицы измерения...

-(void)testUnescapeHtmlCodes {

NSString* expected = @"A & B";
NSString* actual = [self unescapeHtmlCodes:@"A &#38; B"];
STAssertTrue( [expected isEqualToString:actual], @"actual = %@", actual );

expected = @"& B";
actual = [self unescapeHtmlCodes:@"&#38; B"];    
STAssertTrue( [expected isEqualToString:actual], @"actual = %@", actual );

expected = @"A &";
actual = [self unescapeHtmlCodes:@"A &#38;"];
STAssertTrue( [expected isEqualToString:actual], @"actual = %@", actual );

}