Make WordPress Core


Ignore:
Timestamp:
04/01/2022 03:38:55 AM (2 years ago)
Author:
peterwilsoncc
Message:

Formatting: Account for HTML entities in wp_extract_urls().

Prevent wp_extract_urls() trimming HTML entities within URLs. Correctly escaped URLs such as https://youtube.com/watch?v=dQw4w9WgXcQ&t=1 will now be extracted as https://youtube.com/watch?v=dQw4w9WgXcQ&t=1 rather than truncated.

Props trex005, voldemortensen, johnbillion, ironprogrammer, costdev, hellofromtonya.
Fixes #30580

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/functions.php

    r53035 r53044  
    821821 *
    822822 * @since 3.7.0
     823 * @since 6.0.0 Fixes support for HTML entities (Trac 30580).
    823824 *
    824825 * @param string $content Content to extract URLs from.
     
    834835                . '\([\w\d]+\)|'
    835836                . '(?:'
    836                     . "[^`!()\[\]{};:'\".,<>«»“”‘’\s]|"
     837                    . "[^`!()\[\]{}:'\".,<>«»“”‘’\s]|"
    837838                    . '(?:[:]\d+)?/?'
    838839                . ')+'
     
    843844    );
    844845
    845     $post_links = array_unique( array_map( 'html_entity_decode', $post_links[2] ) );
     846    $post_links = array_unique(
     847        array_map(
     848            static function( $link ) {
     849                // Decode to replace valid entities, like &amp;.
     850                $link = html_entity_decode( $link );
     851                // Maintain backward compatibility by removing extraneous semi-colons (`;`).
     852                return str_replace( ';', '', $link );
     853            },
     854            $post_links[2]
     855        )
     856    );
    846857
    847858    return array_values( $post_links );
Note: See TracChangeset for help on using the changeset viewer.