Make WordPress Core

Ticket #28564: miqro-28564.3.patch

File miqro-28564.3.patch, 2.7 KB (added by miqrogroove, 10 years ago)

Allow shortcodes and HTML to alternate semi-recursively.

  • src/wp-includes/formatting.php

     
    203203                . '|'
    204204                .       '\['            // Find start of shortcode.
    205205                .       '\[?'           // Shortcodes may begin with [[
    206                 .       '[^\[\]<>]+'    // Shortcodes do not contain other shortcodes or HTML elements.
     206                .       '(?:'
     207                .               '[^\[\]<>]'     // Shortcodes do not contain other shortcodes.
     208                .       '|'
     209                .               '<.+?>' // HTML elements permitted. Prevents matching ] before >.
     210                .       ')+'
    207211                .       '\]'            // Find end of shortcode.
    208212                .       '\]?'           // Shortcodes may end with ]]
    209213                . ')/s';
     
    220224                                _wptexturize_pushpop_element( $curl, $no_texturize_tags_stack, $no_texturize_tags, '<', '>' );
    221225                        }
    222226
    223                 } elseif ( '[' === $first && 1 === preg_match( '/^\[[^\[\]<>]+\]$/', $curl ) ) {
     227                } elseif ( '[' === $first && 1 === preg_match( '/^\[(?:[^\[\]<>]|<.+?>)+\]$/', $curl ) ) {
    224228                        // This is a shortcode delimeter.
    225229
    226230                        _wptexturize_pushpop_element( $curl, $no_texturize_shortcodes_stack, $no_texturize_shortcodes, '[', ']' );
    227231
    228                 } elseif ( '[' === $first && 1 === preg_match( '/^\[\[?[^\[\]<>]+\]\]?$/', $curl ) ) {
     232                } elseif ( '[' === $first && 1 === preg_match( '/^\[\[?(?:[^\[\]<>]|<.+?>)+\]\]?$/', $curl ) ) {
    229233                        // This is an escaped shortcode delimeter.
    230234
    231235                        // Do not texturize.
  • tests/phpunit/tests/formatting/WPTexturize.php

     
    11461146        function data_tag_avoidance() {
    11471147                return array(
    11481148                        array(
     1149                                '[ is it wise to <a title="allow user content ] here? hmm"> maybe </a> ]',
     1150                                '[ is it wise to <a title="allow user content ] here? hmm"> maybe </a> ]',
     1151                        ),
     1152                        array(
    11491153                                '[ photos by <a href="http://example.com/?a[]=1&a[]=2"> this guy </a> ]',
    11501154                                '[ photos by <a href="http://example.com/?a[]=1&#038;a[]=2"> this guy </a> ]',
    11511155                        ),
     
    11941198                                '[gallery &#8230;',
    11951199                        ),
    11961200                        array(
     1201                                '[gallery <br ... /> ...]', // This tag is still valid. Shortcode 'attributes' are not considered in the initial parsing of shortcodes, and HTML is allowed.
    11971202                                '[gallery <br ... /> ...]',
    1198                                 '[gallery <br ... /> &#8230;]',
    11991203                        ),
    12001204                        array(
    12011205                                '<br [gallery ...] ... />',
     
    12341238                                '[/gallery ...]]',
    12351239                        ),
    12361240                        array(
     1241                                '[[gallery <br ... /> ...]]', // This gets parsed as an escaped shortcode with embedded HTML.  Brains may explode.
    12371242                                '[[gallery <br ... /> ...]]',
    1238                                 '[[gallery <br ... /> &#8230;]]',
    12391243                        ),
    12401244                        array(
    12411245                                '<br [[gallery ...]] ... />',