Make WordPress Core

Changeset 61347


Ignore:
Timestamp:
12/03/2025 06:07:53 PM (10 months ago)
Author:
westonruter
Message:

General: Leverage DOMParser to implement wp.sanitize.stripTags().

Developed in ​https://github.com/WordPress/wordpress-develop/pull/10536

Follow-up to [60907].

Props hbhalodia, dmsnell, westonruter.
See #48054.
Fixes #64274.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/js/_enqueues/wp/sanitize.js

    r60907 r61347  
    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( /<(script|style)[^>]*>[\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
Note: See TracChangeset for help on using the changeset viewer.