Преобразование & amp; to & 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

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

благодаря

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

Проверьте мою категорию 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 
tags. - (NSString *)stringWithNewLinesAsBRs; // Remove newlines and white space from string. - (NSString *)stringByRemovingNewLinesAndWhitespace;

В iPhone SDK нет встроенной функции. Вы должны указать ошибку, которая вам нужна. В обычном Mac OS X SDK вы можете либо загрузить fragment в 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 

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

 -(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 ) { // eg '& 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 & B"]; STAssertTrue( [expected isEqualToString:actual], @"actual = %@", actual ); expected = @"& B"; actual = [self unescapeHtmlCodes:@"& B"]; STAssertTrue( [expected isEqualToString:actual], @"actual = %@", actual ); expected = @"A &"; actual = [self unescapeHtmlCodes:@"A &"]; STAssertTrue( [expected isEqualToString:actual], @"actual = %@", actual ); } 
Interesting Posts
Давайте будем гением компьютера.