WordPress.org

Make WordPress Core

Ticket #2691: 2691.8.diff

File 2691.8.diff, 4.7 KB (added by adamsilverstein, 5 months ago)
  • src/wp-includes/formatting.php

    diff --git src/wp-includes/formatting.php src/wp-includes/formatting.php
    index 7e29390a25..0ae0729b28 100644
    function wpautop( $pee, $br = true ) { 
    579579
    580580        // Optionally insert line breaks.
    581581        if ( $br ) {
     582
     583                // Multi-line HTML comments. (Opening)
     584                $pee = preg_replace_callback( '/<\!\-.*?\n/s', '_autop_newline_preservation_helper', $pee );
     585
     586                // Multi-line HTML comments. (Closing)
     587                $pee = preg_replace_callback( '/\->.*?\n/s', '_autop_newline_preservation_helper', $pee );
     588
    582589                // Replace newlines that shouldn't be touched with a placeholder.
    583590                $pee = preg_replace_callback( '/<(script|style|svg).*?<\/\\1>/s', '_autop_newline_preservation_helper', $pee );
    584591
    function wpautop( $pee, $br = true ) { 
    592599                $pee = str_replace( '<WPPreserveNewline />', "\n", $pee );
    593600        }
    594601
     602        // No <p> around HTML comment
     603        if ( strpos( $pee, '<!-' ) !== false ) {
     604                $pee = preg_replace( '|<p>\s*<\!-|', '<!-', $pee );
     605
     606                // Remove the tailing paragraph if this paragraph starts as a comment.
     607                if ( 0 === strpos( $pee, '<!-' ) ) {
     608                        $pee = preg_replace( '|\-->\s*</p>|', '-->', $pee );
     609                }
     610        }
     611
    595612        // If a <br /> tag is after an opening or closing block tag, remove it.
    596613        $pee = preg_replace( '!(</?' . $allblocks . '[^>]*>)\s*<br />!', '$1', $pee );
    597614
    function wpautop( $pee, $br = true ) { 
    599616        $pee = preg_replace( '!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee );
    600617        $pee = preg_replace( "|\n</p>$|", '</p>', $pee );
    601618
     619        // No <br /> after HTML comment
     620        $pee = preg_replace( "|(\-\->.*[^</p>])\n|", "$1<br />\n", $pee );
     621        $pee = str_replace( "--><br />\n", "-->\n", $pee );
     622
    602623        // Replace placeholder <pre> tags with their original content.
    603624        if ( ! empty( $pre_tags ) ) {
    604625                $pee = str_replace( array_keys( $pre_tags ), array_values( $pre_tags ), $pee );
  • tests/phpunit/tests/formatting/Autop.php

    diff --git tests/phpunit/tests/formatting/Autop.php tests/phpunit/tests/formatting/Autop.php
    index 071f202f38..75c264333e 100644
    Paragraph two.'; 
    429429                $this->assertEquals( $expected, trim( wpautop( $content ) ) );
    430430        }
    431431
     432        /**
     433         * Do not allow HTML comments to get wrapped in p tags.
     434         *
     435         * @dataProvider data_html_comments
     436         * @ticket 2691
     437         */
     438        function test_html_comments( $input, $expected ) {
     439                $this->assertEquals( $expected, trim( wpautop( $input ) ) );
     440        }
     441
     442        function data_html_comments() {
     443                return array(
     444                        array(
     445                                '<!-- HTML Comment -->',
     446                                '<!-- HTML Comment -->',
     447                        ),
     448                        array(
     449                                "<!-- HTML\nmultiline\nComment -->",
     450                                "<!-- HTML\nmultiline\nComment -->",
     451                        ),
     452                        array(
     453                                "Line One.\n<!-- HTML Comment -->Line Two\nLine Three.",
     454                                '<p>Line One.<br />
     455<!-- HTML Comment -->Line Two<br />
     456Line Three.</p>',
     457                        ),
     458                        array(
     459                                "<p>Line One.\n<!-- HTML Comment -->Line Two</p>\nLine Three.",
     460                                '<p>Line One.<br />
     461<!-- HTML Comment -->Line Two</p>
     462<p>Line Three.</p>',
     463                        ),
     464                        array(
     465                                "Line One.\n<!-- HTML\nComment -->\nLine Three.",
     466                                '<p>Line One.<br />
     467<!-- HTML
     468Comment -->
     469Line Three.</p>',
     470                        ),
     471                        array(
     472                                '<script type="text/javascript"><!--
     473google_ad_client = "xxxxxxxx";
     474google_ad_width = 120;
     475google_ad_height = 60;
     476google_ad_format = "120x60_as_rimg";
     477google_cpa_choice = "CAAQ2eOZzgEaCD4zuVkdzt_CKI-293M";
     478//--></script>',
     479                                '<p><script type="text/javascript"><!--
     480google_ad_client = "xxxxxxxx";
     481google_ad_width = 120;
     482google_ad_height = 60;
     483google_ad_format = "120x60_as_rimg";
     484google_cpa_choice = "CAAQ2eOZzgEaCD4zuVkdzt_CKI-293M";
     485//--></script></p>',
     486                        ),
     487                        array(
     488                                '<!-- wp:paragraph -->
     489<p><del>This is a paragraph.</del></p>
     490<!-- /wp:paragraph -->
     491<!-- wp:client/custom-block {"title":"This is the title"} /-->
     492<!-- wp:paragraph -->
     493<!-- /wp:paragraph -->',
     494                                '<!-- wp:paragraph -->
     495<p><del>This is a paragraph.</del></p>
     496<!-- /wp:paragraph -->
     497<!-- wp:client/custom-block {"title":"This is the title"} /-->
     498<!-- wp:paragraph -->
     499<!-- /wp:paragraph -->',
     500                        ),
     501                );
     502        }
     503
    432504        /**
    433505         * Do not allow newlines within HTML elements to become mangled.
    434506         *
  • tests/phpunit/tests/media.php

    diff --git tests/phpunit/tests/media.php tests/phpunit/tests/media.php
    index 112382462a..eec1bb1f1d 100644
    EOF; 
    12401240https://youtube.com/watch?v=TEST01YRHA0<br />
    12411241<script><!--
    12421242my_function();
    1243 // --> </script><br />
    1244 https://youtube.com/watch?v=TEST02YRHA0<br />
     1243// --> </script>
     1244https://youtube.com/watch?v=TEST02YRHA0
    12451245<a href="http://www.example.com/embed/TEST03YRHA0">http://www.example.com/embed/TEST03YRHA0</a><br />
    12461246http://www.example.com/embed/TEST04YRHA0<br />
    12471247Stop.</p>