/** * Converts a relative URL to an absolute URL relative to a given URL. * * If an Absolute URL is provided, no processing of that URL is done. * * @since 3.4.0 * * @static * @access public * * @param string $maybe_relative_path The URL which might be relative * @param string $url The URL which $maybe_relative_path is relative to * @return string An Absolute URL, in a failure condition where the URL cannot be parsed, the relative URL will be returned. */ public static function make_absolute_url($maybe_relative_path, $url) { if (empty($url)) { return $maybe_relative_path; } if (!($url_parts = WP_HTTP::parse_url($url))) { return $maybe_relative_path; } if (!($relative_url_parts = WP_HTTP::parse_url($maybe_relative_path))) { return $maybe_relative_path; } // Check for a scheme on the 'relative' url if (!empty($relative_url_parts['scheme'])) { return $maybe_relative_path; } $absolute_path = $url_parts['scheme'] . '://'; // Schemeless URL's will make it this far, so we check for a host in the relative url and convert it to a protocol-url if (isset($relative_url_parts['host'])) { $absolute_path .= $relative_url_parts['host']; if (isset($relative_url_parts['port'])) { $absolute_path .= ':' . $relative_url_parts['port']; } } else { $absolute_path .= $url_parts['host']; if (isset($url_parts['port'])) { $absolute_path .= ':' . $url_parts['port']; } } // Start off with the Absolute URL path. $path = !empty($url_parts['path']) ? $url_parts['path'] : '/'; // If it's a root-relative path, then great. if (!empty($relative_url_parts['path']) && '/' == $relative_url_parts['path'][0]) { $path = $relative_url_parts['path']; // Else it's a relative path. } elseif (!empty($relative_url_parts['path'])) { // Strip off any file components from the absolute path. $path = substr($path, 0, strrpos($path, '/') + 1); // Build the new path. $path .= $relative_url_parts['path']; // Strip all /path/../ out of the path. while (strpos($path, '../') > 1) { $path = preg_replace('![^/]+/\\.\\./!', '', $path); } // Strip any final leading ../ from the path. $path = preg_replace('!^/(\\.\\./)+!', '', $path); } // Add the Query string. if (!empty($relative_url_parts['query'])) { $path .= '?' . $relative_url_parts['query']; } return $absolute_path . '/' . ltrim($path, '/'); }
public static function parse_url($url) { return parent::parse_url($url); }