WordPress.org

Make WordPress Core

Ticket #2060: wptexturize_no_mangling_in_code.patch

File wptexturize_no_mangling_in_code.patch, 1.4 KB (added by allan, 8 years ago)

Patch to fix the problem

  • wp-includes/functions-formatting.php

     
    44        $output = ''; 
    55        // Capture tags and everything inside them 
    66        $textarr = preg_split("/(<.*>)/Us", $text, -1, PREG_SPLIT_DELIM_CAPTURE); 
    7         $stop = count($textarr); $next = true; // loop stuff 
     7        $stop = count($textarr); $disable_mangling = 0; // loop stuff 
    88        for ($i = 0; $i < $stop; $i++) { 
    99                $curl = $textarr[$i]; 
    1010 
    11                 if (isset($curl{0}) && '<' != $curl{0} && $next) { // If it's not a tag 
     11                if (isset($curl{0}) && '<' != $curl{0} && $disable_mangling == 0) { // If it's not a tag 
    1212                        $curl = str_replace('---', '&#8212;', $curl); 
    1313                        $curl = str_replace(' -- ', ' &#8212; ', $curl); 
    1414                        $curl = str_replace('--', '&#8211;', $curl); 
     
    3636                        $curl = preg_replace('/(\d+)x(\d+)/', "$1&#215;$2", $curl); 
    3737 
    3838                } elseif (strstr($curl, '<code') || strstr($curl, '<pre') || strstr($curl, '<kbd' || strstr($curl, '<style') || strstr($curl, '<script'))) { 
    39                         // strstr is fast 
    40                         $next = false; 
    41                 } else { 
    42                         $next = true; 
     39                        $disable_mangling++; 
     40                } elseif (strstr($curl, '</code') || strstr($curl, '</pre') || strstr($curl, '</kbd' || strstr($curl, '</style') || strstr($curl, '</script'))) { 
     41                        $disable_mangling--; 
    4342                } 
    4443                $curl = preg_replace('/&([^#])(?![a-z1-4]{1,8};)/', '&#038;$1', $curl); 
    4544                $output .= $curl;