Przeglądaj źródła

Add method for escaping HTML entities in a string to FLEX utility.

This will be used for showing text inside a web view. Taken from the Flipboard codebase.
Ryan Olson 12 lat temu
rodzic
commit
8052434c1b
2 zmienionych plików z 33 dodań i 0 usunięć
  1. 1 0
      Classes/Utility/FLEXUtility.h
  2. 32 0
      Classes/Utility/FLEXUtility.m

+ 1 - 0
Classes/Utility/FLEXUtility.h

@@ -22,5 +22,6 @@
 + (NSString *)safeDescriptionForObject:(id)object;
 + (UIFont *)defaultFontOfSize:(CGFloat)size;
 + (UIFont *)defaultTableViewCellLabelFont;
++ (NSString *)stringByEscapingHTMLEntitiesInString:(NSString *)originalString;
 
 @end

+ 32 - 0
Classes/Utility/FLEXUtility.m

@@ -114,4 +114,36 @@
     return [self defaultFontOfSize:12.0];
 }
 
++ (NSString *)stringByEscapingHTMLEntitiesInString:(NSString *)originalString
+{
+    static NSDictionary *escapingDictionary = nil;
+    static NSRegularExpression *regex = nil;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        escapingDictionary = @{ @" " : @" ",
+                                @">" : @">",
+                                @"<" : @"&lt;",
+                                @"&" : @"&amp;",
+                                @"'" : @"&apos;",
+                                @"\"" : @"&quot;",
+                                @"«" : @"&laquo;",
+                                @"»" : @"&raquo;"
+                                };
+        regex = [NSRegularExpression regularExpressionWithPattern:@"(&|>|<|'|\"|«|»)" options:0 error:nil];
+    });
+    
+    NSMutableString *mutableString = [originalString mutableCopy];
+    
+    NSArray *matches = [regex matchesInString:mutableString options:0 range:NSMakeRange(0, [mutableString length])];
+    for (NSTextCheckingResult *result in [matches reverseObjectEnumerator]) {
+        NSString *foundString = [mutableString substringWithRange:result.range];
+        NSString *replacementString = escapingDictionary[foundString];
+        if (replacementString) {
+            [mutableString replaceCharactersInRange:result.range withString:replacementString];
+        }
+    }
+    
+    return [mutableString copy];
+}
+
 @end