diff --git a/Sources/NSString+HTMLKit.m b/Sources/NSString+HTMLKit.m
index 2d37ac4..c65bc8f 100644
--- a/Sources/NSString+HTMLKit.m
+++ b/Sources/NSString+HTMLKit.m
@@ -58,4 +58,15 @@ NS_INLINE BOOL isHtmlWhitespaceChar(unichar c)
return idx;
}
+- (NSString *)stringByEscapingForHTML
+{
+ NSMutableString *escaped = [self mutableCopy];
+ [escaped replaceOccurrencesOfString:@"&" withString:@"&" options:0 range:NSMakeRange(0, escaped.length)];
+ [escaped replaceOccurrencesOfString:@"0x00A0" withString:@" " options:0 range:NSMakeRange(0, escaped.length)];
+ [escaped replaceOccurrencesOfString:@"\"" withString:@""" options:0 range:NSMakeRange(0, escaped.length)];
+ [escaped replaceOccurrencesOfString:@"<" withString:@"<" options:0 range:NSMakeRange(0, escaped.length)];
+ [escaped replaceOccurrencesOfString:@">" withString:@">" options:0 range:NSMakeRange(0, escaped.length)];
+ return escaped;
+}
+
@end
diff --git a/Sources/include/NSString+HTMLKit.h b/Sources/include/NSString+HTMLKit.h
index b73d0ad..cd532d2 100644
--- a/Sources/include/NSString+HTMLKit.h
+++ b/Sources/include/NSString+HTMLKit.h
@@ -48,6 +48,13 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (NSUInteger)leadingHTMLWhitespaceLength;
+/**
+Escapes this string as specified in `https://html.spec.whatwg.org/multipage/parsing.html#escapingString`
+
+ @return A copy of this string by HTML-escaping this stirng.
+ */
+- (NSString *)stringByEscapingForHTML;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/Tests/HTMLKitTests/HTMLStringCategoryTests.m b/Tests/HTMLKitTests/HTMLStringCategoryTests.m
index b5d5571..c66e422 100644
--- a/Tests/HTMLKitTests/HTMLStringCategoryTests.m
+++ b/Tests/HTMLKitTests/HTMLStringCategoryTests.m
@@ -8,6 +8,7 @@
#import
#import "NSString+HTMLKit.h"
+#import "HTMLDOM.h"
@interface HTMLKitStringCategoryTests : XCTestCase
@@ -79,4 +80,20 @@
XCTAssertEqual([@"\t\r\n\f\0 " leadingHTMLWhitespaceLength], 4);
}
+- (void)testStringByEscapingForHTML
+{
+ XCTAssertEqualObjects(@"".stringByEscapingForHTML, @"");
+ XCTAssertEqualObjects(@"&".stringByEscapingForHTML, @"&");
+ XCTAssertEqualObjects(@"0x00A0".stringByEscapingForHTML, @" ");
+ XCTAssertEqualObjects(@"\"".stringByEscapingForHTML, @""");
+ XCTAssertEqualObjects(@"<".stringByEscapingForHTML, @"<");
+ XCTAssertEqualObjects(@">".stringByEscapingForHTML, @">");
+ XCTAssertEqualObjects(@"&0x00A0\"<>".stringByEscapingForHTML, @"& "<>");
+
+ NSString *input = @"This is an email: John Do ";
+ NSString *escaped = input.stringByEscapingForHTML;
+ XCTAssertNotEqual(input, escaped);
+ XCTAssertEqualObjects(escaped, @"This is an <b>email</b>: John Do <john@do.com>");
+}
+
@end