www whatwg what spec language español 3wc iphone objective-c escaping html-entities

iphone - spec - whatwg español



Conversión y amp; a & en Objective-C (4)

Esta pregunta ya tiene una respuesta aquí:

Tengo una cadena de URL en el siguiente formato.

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

Quiero reemplazar & con & en la URL anterior. Mi resultado debería ser:

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

¿Alguien puede enviarme el código para hacer esto?

Gracias


Mira mi categoría NSString para HTML . Aquí están los métodos disponibles:

// 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;


No hay una función incorporada para esto en el iPhone SDK. Debes presentar un error para que desees la funcionalidad. En el SDK de Mac OS X normal, puede cargar el fragmento en un NSAttributedString como HTML y pedirle que devuelva una cadena simple, o usar CFXMLCreateStringByUnescapingEntities() .

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


Para iOS, el siguiente código debería funcionar para códigos numéricos. Debería ser relativamente fácil extenderse a los gustos de &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; }

Algún código de prueba de unidad ...

-(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 ); }


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