想知道在Objective C中有没有一个简单的方法来做一个简单的HTML转义/取消转义。我想要的是类似下面这样的代码:
NSString *string = @"<span>Foo</span>";
[string stringByUnescapingHTML];
它会返回
<span>Foo</span>
希望不会转义所有其他的超文本标记语言实体,甚至像Ӓ之类的ASCII码。
在Cocoa Touch/UIKit中有什么方法可以做到这一点吗?
发布于 2009-03-18 18:51:48
此link包含以下解决方案。Cocoa CF具有CFXMLCreateStringByUnescapingEntities功能,但在iPhone上不可用。
@interface MREntitiesConverter : NSObject <NSXMLParserDelegate>{
NSMutableString* resultString;
}
@property (nonatomic, retain) NSMutableString* resultString;
- (NSString*)convertEntitiesInString:(NSString*)s;
@end
@implementation MREntitiesConverter
@synthesize resultString;
- (id)init
{
if([super init]) {
resultString = [[NSMutableString alloc] init];
}
return self;
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)s {
[self.resultString appendString:s];
}
- (NSString*)convertEntitiesInString:(NSString*)s {
if (!s) {
NSLog(@"ERROR : Parameter string is nil");
}
NSString* xmlStr = [NSString stringWithFormat:@"<d>%@</d>", s];
NSData *data = [xmlStr dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSXMLParser* xmlParse = [[[NSXMLParser alloc] initWithData:data] autorelease];
[xmlParse setDelegate:self];
[xmlParse parse];
return [NSString stringWithFormat:@"%@",resultString];
}
- (void)dealloc {
[resultString release];
[super dealloc];
}
@end
发布于 2010-05-16 19:02:03
看看我的NSString category for XMLEntities吧。有一些方法可以解码XML实体(包括所有HTML字符引用),对XML实体进行编码,剥离标记并删除字符串中的换行符和空格:
- (NSString *)stringByStrippingTags;
- (NSString *)stringByDecodingXMLEntities; // Including all HTML character references
- (NSString *)stringByEncodingXMLEntities;
- (NSString *)stringWithNewLinesAsBRs;
- (NSString *)stringByRemovingNewLinesAndWhitespace;
发布于 2011-03-02 13:48:48
Google Toolbox for Mac的另一个超文本标记语言NSString类别
尽管名称如此,但它在iOS上也是有效的。
http://google-toolbox-for-mac.googlecode.com/svn/trunk/Foundation/GTMNSString+HTML.h
/// Get a string where internal characters that are escaped for HTML are unescaped
//
/// For example, '&' becomes '&'
/// Handles   and 2 cases as well
///
// Returns:
// Autoreleased NSString
//
- (NSString *)gtm_stringByUnescapingFromHTML;
我只需要在项目中包含三个文件: header、implementation和GTMDefines.h
。
https://stackoverflow.com/questions/659602
复制相似问题