- // < PHP 5.4.7 compat, doesn't detect schemeless URL's host field
- if ( '//' == substr( $url, 0, 2 ) && ! isset( $parts['host'] ) ) {
- $path_parts = explode( '/', substr( $parts['path'], 2 ), 2 );
- $parts['host'] = $path_parts[0];
- if ( isset( $path_parts[1] ) ) {
- $parts['path'] = '/' . $path_parts[1];
- } else {
- unset( $parts['path'] );
- }
+ // Remove the placeholder values.
+ foreach ( $to_unset as $key ) {
+ unset( $parts[ $key ] );
+ }
+
+ return _get_component_from_parsed_url_array( $parts, $component );
+}
+
+/**
+ * Retrieve a specific component from a parsed URL array.
+ *
+ * @internal
+ *
+ * @since 4.7.0
+ *
+ * @param array|false $url_parts The parsed URL. Can be false if the URL failed to parse.
+ * @param int $component The specific component to retrieve. Use one of the PHP
+ * predefined constants to specify which one.
+ * Defaults to -1 (= return all parts as an array).
+ * @see http://php.net/manual/en/function.parse-url.php
+ * @return mixed False on parse failure; Array of URL components on success;
+ * When a specific component has been requested: null if the component
+ * doesn't exist in the given URL; a sting or - in the case of
+ * PHP_URL_PORT - integer when it does. See parse_url()'s return values.
+ */
+function _get_component_from_parsed_url_array( $url_parts, $component = -1 ) {
+ if ( -1 === $component ) {
+ return $url_parts;
+ }
+
+ $key = _wp_translate_php_url_constant_to_key( $component );
+ if ( false !== $key && is_array( $url_parts ) && isset( $url_parts[ $key ] ) ) {
+ return $url_parts[ $key ];
+ } else {
+ return null;