WordPress.org

Make WordPress Core

Ticket #2691: 2691.9.diff

File 2691.9.diff, 4.9 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..7eece9efbd 100644
    function wpautop( $pee, $br = true ) { 
    552552
    553553        // Rebuild the content as a string, wrapping every bit with a <p>.
    554554        foreach ( $pees as $tinkle ) {
    555                 $pee .= '<p>' . trim( $tinkle, "\n" ) . "</p>\n";
     555
     556                // Don't wrap HTML comments in <p> tags.
     557                if (
     558                        0 === strpos( trim( $tinkle, "\n" ), '<!--' ) &&
     559                        ( strlen(  trim( $tinkle, "\n" ) ) - strlen( "-->" ) ) === strpos(  trim( $tinkle, "\n" ), "-->" )
     560                ) {
     561                        $pee .= trim( $tinkle, "\n" );
     562                } else {
     563                        $pee .= '<p>' . trim( $tinkle, "\n" ) . "</p>\n";
     564                }
    556565        }
    557566
    558567        // Under certain strange conditions it could create a P of entirely whitespace.
    function wpautop( $pee, $br = true ) { 
    579588
    580589        // Optionally insert line breaks.
    581590        if ( $br ) {
     591
     592                // Multi-line HTML comments. (Opening)
     593                $pee = preg_replace_callback( '/<\!\-\-.*?\n/s', '_autop_newline_preservation_helper', $pee );
     594
     595                // Multi-line HTML comments. (Closing)
     596                $pee = preg_replace_callback( '/\-\->.*?\n/s', '_autop_newline_preservation_helper', $pee );
     597
    582598                // Replace newlines that shouldn't be touched with a placeholder.
    583599                $pee = preg_replace_callback( '/<(script|style|svg).*?<\/\\1>/s', '_autop_newline_preservation_helper', $pee );
    584600
    function wpautop( $pee, $br = true ) { 
    592608                $pee = str_replace( '<WPPreserveNewline />', "\n", $pee );
    593609        }
    594610
     611        // No <p> around HTML comment
     612        if ( strpos( $pee, '<!--' ) !== false ) {
     613                $pee = preg_replace( '|<p>\s*<\!--|', '<!--', $pee );
     614
     615                // Remove the tailing paragraph if this paragraph starts as a comment.
     616                if ( 0 === strpos( $pee, '<!--' ) ) {
     617                        $pee = preg_replace( '|\-->\s*</p>|', '-->', $pee );
     618                }
     619        }
     620
    595621        // If a <br /> tag is after an opening or closing block tag, remove it.
    596622        $pee = preg_replace( '!(</?' . $allblocks . '[^>]*>)\s*<br />!', '$1', $pee );
    597623
  • tests/phpunit/tests/formatting/Autop.php

    diff --git tests/phpunit/tests/formatting/Autop.php tests/phpunit/tests/formatting/Autop.php
    index 071f202f38..fe2e0f84dd 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
     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 --><p><del>This is a paragraph.</del></p>
     495<!-- /wp:paragraph -->
     496<!-- wp:client/custom-block {"title":"This is the title"} /-->
     497<!-- wp:paragraph -->
     498<!-- /wp:paragraph -->',
     499                        ),
     500                        array(
     501                                '<p>foo</p>
     502
     503<!-- HTML comment ->\n\n still in the comment... -->',
     504                                '<p>foo</p>
     505<!-- HTML comment ->\n\n still in the comment... -->',
     506                        )
     507                );
     508        }
     509
    432510        /**
    433511         * Do not allow newlines within HTML elements to become mangled.
    434512         *
  • 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>