Make WordPress Core

Ticket #6518: shortcode-escaping-r7583.patch

File shortcode-escaping-r7583.patch, 1.3 KB (added by tellyworth, 17 years ago)
  • wordpress/wp-includes/shortcodes.php

     
    7575        $tagnames = array_keys($shortcode_tags);
    7676        $tagregexp = join( '|', array_map('preg_quote', $tagnames) );
    7777
    78         $pattern = '/\[('.$tagregexp.')\b(.*?)(?:(\/))?\](?:(.+?)\[\/\1\])?/s';
     78        $pattern = '/(.?)\[('.$tagregexp.')\b(.*?)(?:(\/))?\](?:(.+?)\[\/\2\])?(.?)/s';
    7979
    8080        return preg_replace_callback($pattern, 'do_shortcode_tag', $content);
    8181}
    8282
    8383function do_shortcode_tag($m) {
    8484        global $shortcode_tags;
     85       
     86        // allow [[foo]] syntax for escaping a tag
     87        if ($m[1] == '[' && $m[6] == ']') {
     88                return substr($m[0], 1, -1);
     89        }
    8590
    86         $tag = $m[1];
    87         $attr = shortcode_parse_atts($m[2]);
     91        $tag = $m[2];
     92        $attr = shortcode_parse_atts($m[3]);
    8893
    89         if ( isset($m[4]) ) {
     94        if ( isset($m[5]) ) {
    9095                // enclosing tag - extra parameter
    91                 return call_user_func($shortcode_tags[$tag], $attr, $m[4]);
     96                return $m[1] . call_user_func($shortcode_tags[$tag], $attr, $m[5]) . $m[6];
    9297        } else {
    9398                // self-closing tag
    94                 return call_user_func($shortcode_tags[$tag], $attr);
     99                return $m[1] . call_user_func($shortcode_tags[$tag], $attr) . $m[6];
    95100        }
    96101}
    97102