File tree Expand file tree Collapse file tree 1 file changed +16
-13
lines changed
Expand file tree Collapse file tree 1 file changed +16
-13
lines changed Original file line number Diff line number Diff line change 2323 * @return {string } Stripped text.
2424 */
2525 stripTags : function ( text ) {
26- let _text = text || '' ;
26+ const domParser = new DOMParser ( ) ;
27+ const htmlDocument = domParser . parseFromString (
28+ text ,
29+ 'text/html'
30+ ) ;
2731
28- // Do the search-replace until there is nothing to be replaced.
29- do {
30- // Keep pre-replace text for comparison.
31- text = _text ;
32-
33- // Do the replacement.
34- _text = text
35- . replace ( / < ! - - [ \s \S ] * ?( - - > | $ ) / g, '' )
36- . replace ( / < ( s c r i p t | s t y l e ) [ ^ > ] * > [ \s \S ] * ?( < \/ \1> | $ ) / ig, '' )
37- . replace ( / < \/ ? [ a - z ] [ \s \S ] * ?( > | $ ) / ig, '' ) ;
38- } while ( _text !== text ) ;
32+ /*
33+ * The following self-assignment appears to be a no-op, but it isn't.
34+ * It enforces the escaping. Reading the `innerText` property decodes
35+ * character references, returning a raw string. When written, however,
36+ * the text is re-escaped to ensure that the rendered text replicates
37+ * what it's given.
38+ *
39+ * See <https://github.com/WordPress/wordpress-develop/pull/10536#discussion_r2550615378>.
40+ */
41+ htmlDocument . body . innerText = htmlDocument . body . innerText ;
3942
4043 // Return the text with stripped tags.
41- return _text ;
44+ return htmlDocument . body . innerHTML ;
4245 } ,
4346
4447 /**
You can’t perform that action at this time.
0 commit comments