WordPress.org

Make WordPress Core

Ticket #1597: 1597.2.diff

File 1597.2.diff, 2.4 KB (added by coffee2code, 6 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