WordPress.org

Make WordPress Core

Ticket #1597: 1597.2.diff

File 1597.2.diff, 2.4 KB (added by coffee2code, 2 years ago)

Refreshed patch to apply cleanly against trunk, plus minor tweaks

  • wp-includes/formatting.php

     
    10931093        $stacksize = 0; 
    10941094        $tagqueue = ''; 
    10951095        $newtext = ''; 
    1096         $single_tags = array( 'br', 'hr', 'img', 'input' ); // Known single-entity/self-closing tags 
     1096        $single_tags = array('area', 'base', 'basefont', 'br', 'col', 'command', 'embed', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param', 'source'); // Known single-entity/self-closing tags 
    10971097        $nestable_tags = array( 'blockquote', 'div', 'span', 'q' ); // Tags that can be immediately nested within themselves 
    10981098 
    10991099        // WP bug fix for comments - in case you REALLY meant to type '< !--' 
     
    11411141 
    11421142                        // Tag Cleaning 
    11431143 
    1144                         // If self-closing or '', don't do anything. 
    1145                         if ( substr($regex[2],-1) == '/' || $tag == '' ) { 
     1144                        // If it's an empty tag "< >", do nothing 
     1145                        if ( '' == $tag ) { 
    11461146                                // do nothing 
    11471147                        } 
     1148                        // ElseIf it presents itself as a self-closing tag... 
     1149                        elseif ( substr( $regex[2], -1 ) == '/' ) { 
     1150                                // ...but it isn't a known single-entity self-closing tag, then don't let it be treated as such and 
     1151                                // immediately close it with a closing tag (the tag will encapsulate no text as a result) 
     1152                                if ( ! in_array( $tag, $single_tags ) ) 
     1153                                        $regex[2] = trim( substr( $regex[2], 0, -1 ) ) . "></$tag"; 
     1154                        } 
    11481155                        // ElseIf it's a known single-entity tag but it doesn't close itself, do so 
    11491156                        elseif ( in_array($tag, $single_tags) ) { 
    11501157                                $regex[2] .= '/'; 
    1151                         } else {        // Push the tag onto the stack 
     1158                        } 
     1159                        // Else it's not a single-entity tag 
     1160                        else { 
    11521161                                // If the top of the stack is the same as the tag we want to push, close previous tag 
    11531162                                if ( $stacksize > 0 && !in_array($tag, $nestable_tags) && $tagstack[$stacksize - 1] == $tag ) { 
    1154                                         $tagqueue = '</' . array_pop ($tagstack) . '>'; 
     1163                                        $tagqueue = '</' . array_pop( $tagstack ) . '>'; 
    11551164                                        $stacksize--; 
    11561165                                } 
    1157                                 $stacksize = array_push ($tagstack, $tag); 
     1166                                $stacksize = array_push( $tagstack, $tag ); 
    11581167                        } 
    11591168 
    11601169                        // Attributes 
    11611170                        $attributes = $regex[2]; 
    1162                         if( !empty($attributes) ) 
    1163                                 $attributes = ' '.$attributes; 
     1171                        if( ! empty( $attributes ) && $attributes[0] != '>' ) 
     1172                                $attributes = ' ' . $attributes; 
    11641173 
    11651174                        $tag = '<' . $tag . $attributes . '>'; 
    11661175                        //If already queuing a close tag, then put this tag on, too