Make WordPress Core


Ignore:
Timestamp:
09/12/2025 10:03:25 PM (11 months ago)
Author:
SergeyBiryukov
Message:

Formatting: Allow specifying https:// as the default protocol in esc_url().

esc_url() will now prepend https:// to the URL if it does not already contain a scheme and the first item in the $protocols array is 'https'.

Follow-up to [5088], [6015], [13299], [33851], [60672].

Props sabernhardt, mkaz, rachelbaker, audrasjb, costdev, aksl95, johnbillion, pcarvalho, SergeyBiryukov.
Fixes #52886.

File:
1 edited

Legend:

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

    r60726 r60734  
    46434643 *
    46444644 * @since 2.8.0
     4645 * @since 6.9.0 Prepends `https://` to the URL if it does not already contain a scheme
     4646 *              and the first item in `$protocols` is 'https'.
    46454647 *
    46464648 * @param string   $url       The URL to be cleaned.
     
    46754677         * If the URL doesn't appear to contain a scheme, we presume
    46764678         * it needs http:// prepended (unless it's a relative link
    4677          * starting with /, # or ?, or a PHP file).
     4679         * starting with /, # or ?, or a PHP file). If the first item
     4680         * in $protocols is 'https', then https:// is prepended.
    46784681         */
    46794682        if ( ! str_contains( $url, ':' ) && ! in_array( $url[0], array( '/', '#', '?' ), true ) &&
    46804683                ! preg_match( '/^[a-z0-9-]+?\.php/i', $url )
    46814684        ) {
    4682                 $url = 'http://' . $url;
     4685                $scheme = ( is_array( $protocols ) && 'https' === array_first( $protocols ) ) ? 'https://' : 'http://';
     4686                $url    = $scheme . $url;
    46834687        }
    46844688
Note: See TracChangeset for help on using the changeset viewer.