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, 12 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;