Преобразование & 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-адресе. Мой результат должен быть:
- Escape Quote в C # для потребления javascript
- Как избежать вызовов os.system ()?
- Поиск цитируемых строк с экранированными кавычками в C # с использованием регулярного выражения
- Как избежать обратных косых черт в строке R
- Скрыть двойную кавычку в строке VB
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 ); }