NSString+FBXMLSafeString.m 1.2 KB

12345678910111213141516171819202122232425262728293031
  1. /**
  2. * Copyright (c) 2015-present, Facebook, Inc.
  3. * All rights reserved.
  4. *
  5. * This source code is licensed under the BSD-style license found in the
  6. * LICENSE file in the root directory of this source tree. An additional grant
  7. * of patent rights can be found in the PATENTS file in the same directory.
  8. */
  9. #import "NSString+FBXMLSafeString.h"
  10. @implementation NSString (FBXMLSafeString)
  11. - (NSString *)fb_xmlSafeStringWithReplacement:(NSString *)replacement
  12. {
  13. static NSMutableCharacterSet *invalidSet;
  14. static dispatch_once_t onceToken;
  15. dispatch_once(&onceToken, ^{
  16. // Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
  17. invalidSet = [NSMutableCharacterSet characterSetWithRange:NSMakeRange(0x9, 1)];
  18. [invalidSet addCharactersInRange:NSMakeRange(0xA, 1)];
  19. [invalidSet addCharactersInRange:NSMakeRange(0xD, 1)];
  20. [invalidSet addCharactersInRange:NSMakeRange(0x20, 0xD7FF - 0x20 + 1)];
  21. [invalidSet addCharactersInRange:NSMakeRange(0xE000, 0xFFFD - 0xE000 + 1)];
  22. [invalidSet addCharactersInRange:NSMakeRange(0x10000, 0x10FFFF - 0x10000 + 1)];
  23. [invalidSet invert];
  24. });
  25. return [[self componentsSeparatedByCharactersInSet:invalidSet] componentsJoinedByString:replacement];
  26. }
  27. @end