WordPress.org

Make WordPress Core

Ticket #8689: preg-replace.patch

File preg-replace.patch, 7.9 KB (added by beaulebens, 5 years ago)

The attached patch fixes all the occurrences of preg_replace identified in this ticket that are part of the the WP core (doesn't cover external libraries).

  • wp-includes/post-template.php

     
    223223 
    224224        } 
    225225        if ( $preview ) // preview fix for javascript bug with foreign languages 
    226                 $output =       preg_replace('/\%u([0-9A-F]{4,4})/e',   "'&#'.base_convert('\\1',16,10).';'", $output); 
     226                $output =       preg_replace_callback('/\%u([0-9A-F]{4})/', create_function('$match', 'return "&#" . base_convert($match[1], 16, 10) . ";";'), $output); 
    227227 
    228228        return $output; 
    229229} 
  • wp-includes/formatting.php

     
    13171317                return $string; 
    13181318        } else { 
    13191319                $subject = str_replace('_', ' ', $matches[2]); 
    1320                 /** @todo use preg_replace_callback() */ 
    1321                 $subject = preg_replace('#\=([0-9a-f]{2})#ei', "chr(hexdec(strtolower('$1')))", $subject); 
     1320                $subject = preg_replace_callback('#\=([0-9a-f]{2})#i', create_function('$match', 'return chr(hexdec(strtolower($match[1])));'), $subject); 
    13221321                return $subject; 
    13231322        } 
    13241323} 
  • wp-includes/kses.php

     
    394394 * @return string Content with fixed HTML tags 
    395395 */ 
    396396function wp_kses_split($string, $allowed_html, $allowed_protocols) { 
    397         return preg_replace('%((<!--.*?(-->|$))|(<[^>]*(>|$)|>))%e', 
    398         "wp_kses_split2('\\1', \$allowed_html, ".'$allowed_protocols)', $string); 
     397        global $pass_allowed_html, $pass_allowed_protocols; 
     398        $pass_allowed_html = $allowed_html; 
     399        $pass_allowed_protocols = $allowed_protocols; 
     400        return preg_replace_callback('%((<!--.*?(-->|$))|(<[^>]*(>|$)|>))%', 
     401                create_function('$match', 'global $pass_allowed_html, $pass_allowed_protocols; return wp_kses_split2($match[1], $pass_allowed_html, $pass_allowed_protocols);'), $string); 
    399402} 
    400403 
    401404/** 
     
    9991002 * @return string Content after decoded entities 
    10001003 */ 
    10011004function wp_kses_decode_entities($string) { 
    1002         $string = preg_replace('/&#([0-9]+);/e', 'chr("\\1")', $string); 
    1003         $string = preg_replace('/&#[Xx]([0-9A-Fa-f]+);/e', 'chr(hexdec("\\1"))', $string); 
     1005        $string = preg_replace_callback('/&#([0-9]+);/', create_function('$match', 'return chr($match[1]);'), $string); 
     1006        $string = preg_replace_callback('/&#[Xx]([0-9A-Fa-f]+);/', create_function('$match', 'return chr(hexdec($match[1]));'), $string); 
    10041007 
    10051008        return $string; 
    10061009} 
  • wp-admin/import/livejournal.php

     
    7171                        $post_content = $this->unhtmlentities($post_content); 
    7272 
    7373                        // Clean up content 
    74                         $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content); 
     74                        $post_content = preg_replace_callback('|<(/?[A-Z]+)|', create_function('$match', 'return "<" . strtolower($match[1]);'), $post_content); 
    7575                        $post_content = str_replace('<br>', '<br />', $post_content); 
    7676                        $post_content = str_replace('<hr>', '<hr />', $post_content); 
    7777                        $post_content = $wpdb->escape($post_content); 
     
    107107                                        $comment_content = $this->unhtmlentities($comment_content); 
    108108 
    109109                                        // Clean up content 
    110                                         $comment_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $comment_content); 
     110                                        $comment_content = preg_replace_callback('|<(/?[A-Z]+)|', create_function('$match', 'return "<" . strtolower($match[1]);'), $comment_content); 
    111111                                        $comment_content = str_replace('<br>', '<br />', $comment_content); 
    112112                                        $comment_content = str_replace('<hr>', '<hr />', $comment_content); 
    113113                                        $comment_content = $wpdb->escape($comment_content); 
  • wp-admin/import/blogware.php

     
    8989                        } 
    9090 
    9191                        // Clean up content 
    92                         $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content); 
     92                        $post_content = preg_replace_callback('|<(/?[A-Z]+)|', create_function('$match', 'return "<" . strtolower($match[1]);'), $post_content); 
    9393                        $post_content = str_replace('<br>', '<br />', $post_content); 
    9494                        $post_content = str_replace('<hr>', '<hr />', $post_content); 
    9595                        $post_content = $wpdb->escape($post_content); 
     
    129129                                        $comment_content = $this->unhtmlentities($comment_content); 
    130130 
    131131                                        // Clean up content 
    132                                         $comment_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $comment_content); 
     132                                        $comment_content = preg_replace_callback('|<(/?[A-Z]+)|', create_function('$match', 'return "<" . strtolower($match[1]);'), $comment_content); 
    133133                                        $comment_content = str_replace('<br>', '<br />', $comment_content); 
    134134                                        $comment_content = str_replace('<hr>', '<hr />', $comment_content); 
    135135                                        $comment_content = $wpdb->escape($comment_content); 
  • wp-admin/import/rss.php

     
    103103                        } 
    104104 
    105105                        // Clean up content 
    106                         $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content); 
     106                        $post_content = preg_replace_callback('|<(/?[A-Z]+)|', create_function('$match', 'return "<" . strtolower($match[1]);'), $post_content); 
    107107                        $post_content = str_replace('<br>', '<br />', $post_content); 
    108108                        $post_content = str_replace('<hr>', '<hr />', $post_content); 
    109109 
  • wp-admin/import/blogger.php

     
    550550                $post_status  = isset( $entry->draft ) ? 'draft' : 'publish'; 
    551551 
    552552                // Clean up content 
    553                 $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content); 
     553                $post_content = preg_replace_callback('|<(/?[A-Z]+)|', create_function('$match', 'return "<" . strtolower($match[1]);'), $post_content); 
    554554                $post_content = str_replace('<br>', '<br />', $post_content); 
    555555                $post_content = str_replace('<hr>', '<hr />', $post_content); 
    556556 
     
    603603                $comment_content = addslashes( $this->no_apos( html_entity_decode( $entry->content ) ) ); 
    604604 
    605605                // Clean up content 
    606                 $comment_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $comment_content); 
     606                $comment_content = preg_replace_callback('|<(/?[A-Z]+)|', create_function('$match', 'return "<" . strtolower($match[1]);'), $comment_content); 
    607607                $comment_content = str_replace('<br>', '<br />', $comment_content); 
    608608                $comment_content = str_replace('<hr>', '<hr />', $comment_content); 
    609609 
  • wp-admin/import/wordpress.php

     
    381381                $post_author    = $this->get_tag( $post, 'dc:creator' ); 
    382382 
    383383                $post_excerpt = $this->get_tag( $post, 'excerpt:encoded' ); 
    384                 $post_excerpt = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_excerpt); 
     384                $post_excerpt = preg_replace_callback('|<(/?[A-Z]+)|', create_function('$match', 'return "<" . strtolower($match[1]);'), $post_excerpt); 
    385385                $post_excerpt = str_replace('<br>', '<br />', $post_excerpt); 
    386386                $post_excerpt = str_replace('<hr>', '<hr />', $post_excerpt); 
    387387 
    388388                $post_content = $this->get_tag( $post, 'content:encoded' ); 
    389                 $post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content); 
     389                $post_content = preg_replace_callback('|<(/?[A-Z]+)|', create_function('$match', 'return "<" . strtolower($match[1]);'), $post_content); 
    390390                $post_content = str_replace('<br>', '<br />', $post_content); 
    391391                $post_content = str_replace('<hr>', '<hr />', $post_content); 
    392392