File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -81,9 +81,33 @@ public extension String {
8181 ///
8282
8383 fileprivate func escapeHTML( isEncodingUnicode: Bool ) -> String {
84- return self . characters. map {
85- isEncodingUnicode ? $0. escapingForUnicode : $0. escapingForASCII
86- } . joined ( )
84+
85+ return self . characters. reduce ( String ( ) ) {
86+
87+ let character = String ( $1)
88+
89+ // ignore alphanumerical characters
90+ guard character < " \u{2f} " || character > " \u{7a} " else {
91+ return $0 + character
92+ }
93+
94+ var escaped : String
95+
96+ if !( isEncodingUnicode) {
97+
98+ guard let escapeSequence = HTMLTables . escapingTable [ character] else {
99+ return $0 + character. unicodeScalars. map { $0. escapingForASCII } . joined ( )
100+ }
101+
102+ escaped = " & " + escapeSequence + " ; "
103+
104+ } else {
105+ escaped = character. unicodeScalars. map { $0. escapingIfNeeded } . joined ( )
106+ }
107+
108+ return $0 + escaped
109+
110+ }
87111 }
88112
89113 // MARK: - Unescaping
Original file line number Diff line number Diff line change @@ -167,6 +167,9 @@ class HTMLStringTests: XCTestCase {
167167 let twoSequences = " a && b " . unescapingFromHTML
168168 XCTAssertEqual ( twoSequences, " a && b " )
169169
170+ let doubleEmojiEscape = ( " Going to the 🇺🇸 next June " ) . escapingForASCIIHTML
171+ XCTAssertEqual ( doubleEmojiEscape, " Going to the 🇺🇸 next June " )
172+
170173 }
171174
172175 // MARK: - Benchmark
You can’t perform that action at this time.
0 commit comments