Make WordPress Core

Changeset 30449


Ignore:
Timestamp:
11/20/2014 02:27:08 PM (10 years ago)
Author:
nacin
Message:

Anchor texturize to shortcodes to improve regex efficiency.

props miqrogroove.
see #29557 for segfault issues.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/formatting.php

    r30383 r30449  
    2929 */
    3030function wptexturize($text, $reset = false) {
    31     global $wp_cockneyreplace;
     31    global $wp_cockneyreplace, $shortcode_tags;
    3232    static $static_characters, $static_replacements, $dynamic_characters, $dynamic_replacements,
    3333        $default_no_texturize_tags, $default_no_texturize_shortcodes, $run_texturize = true;
     
    206206    // Look for shortcodes and HTML elements.
    207207
     208    $tagnames = array_keys( $shortcode_tags );
     209    $tagregexp = join( '|', array_map( 'preg_quote', $tagnames ) );
     210    $tagregexp = "(?:$tagregexp)(?![\\w-])"; // Excerpt of get_shortcode_regex().
     211
    208212    $comment_regex =
    209213          '!'           // Start of comment, after the <.
     
    215219
    216220    $shortcode_regex =
    217           '\['          // Find start of shortcode.
    218         . '[\/\[]?'     // Shortcodes may begin with [/ or [[
    219         . '[^\s\/\[\]]' // No whitespace before name.
    220         . '[^\[\]]*+'   // Shortcodes do not contain other shortcodes. Possessive critical.
    221         . '\]'          // Find end of shortcode.
    222         . '\]?';        // Shortcodes may end with ]]
     221          '\['              // Find start of shortcode.
     222        . '[\/\[]?'         // Shortcodes may begin with [/ or [[
     223        . $tagregexp        // Only match registered shortcodes, because performance.
     224        . '(?:'
     225        .     '[^\[\]<>]+'  // Shortcodes do not contain other shortcodes. Quantifier critical.
     226        . '|'
     227        .     '<[^\[\]>]*>' // HTML elements permitted. Prevents matching ] before >.
     228        . ')*+'             // Possessive critical.
     229        . '\]'              // Find end of shortcode.
     230        . '\]?';            // Shortcodes may end with ]]
    223231
    224232    $regex =
  • trunk/tests/phpunit/tests/formatting/WPTexturize.php

    r29781 r30449  
    11971197            ),
    11981198            array(
    1199                 '[is it wise to <a title="allow user content ] here? hmm"> maybe </a> ]', // HTML corruption is a known bug.  See tickets #12690 and #29557.
    1200                 '[is it wise to <a title="allow user content ] here? hmm&#8221;> maybe </a> ]',
     1199                '[is it wise to <a title="allow user content ] here? hmm"> maybe </a> ]',
     1200                '[is it wise to <a title="allow user content ] here? hmm"> maybe </a> ]',
    12011201            ),
    12021202            array(
    12031203                '[caption - is it wise to <a title="allow user content ] here? hmm"> maybe </a> ]',
    1204                 '[caption - is it wise to <a title="allow user content ] here? hmm&#8221;> maybe </a> ]',
     1204                '[caption &#8211; is it wise to <a title="allow user content ] here? hmm"> maybe </a> ]',
    12051205            ),
    12061206            array(
     
    17681768            array(
    17691769                '[code ...]...[/code]', // code is not a registered shortcode.
    1770                 '[code ...]...[/code]',
     1770                '[code &#8230;]&#8230;[/code]',
    17711771            ),
    17721772            array(
    17731773                '[hello ...]...[/hello]', // hello is not a registered shortcode.
    1774                 '[hello ...]&#8230;[/hello]',
     1774                '[hello &#8230;]&#8230;[/hello]',
    17751775            ),
    17761776            array(
    17771777                '[...]...[/...]', // These are potentially usable shortcodes.
    1778                 '[...]&#8230;[/...]',
     1778                '[&#8230;]&#8230;[/&#8230;]',
    17791779            ),
    17801780            array(
    17811781                '[gal>ery ...]',
    1782                 '[gal>ery ...]',
     1782                '[gal>ery &#8230;]',
    17831783            ),
    17841784            array(
    17851785                '[randomthing param="test"]',
    1786                 '[randomthing param="test"]',
     1786                '[randomthing param=&#8221;test&#8221;]',
    17871787            ),
    17881788            array(
Note: See TracChangeset for help on using the changeset viewer.