3v4l.org

run code in 200+ php & hhvm versions
Bugs & Features
<?php // https://github.com/jakeasmith/http_build_url /** * URL constants as defined in the PHP Manual under "Constants usable with * http_build_url()". * * @see http://us2.php.net/manual/en/http.constants.php#http.constants.url */ if (!defined('HTTP_URL_REPLACE')) { define('HTTP_URL_REPLACE', 1); } if (!defined('HTTP_URL_JOIN_PATH')) { define('HTTP_URL_JOIN_PATH', 2); } if (!defined('HTTP_URL_JOIN_QUERY')) { define('HTTP_URL_JOIN_QUERY', 4); } if (!defined('HTTP_URL_STRIP_USER')) { define('HTTP_URL_STRIP_USER', 8); } if (!defined('HTTP_URL_STRIP_PASS')) { define('HTTP_URL_STRIP_PASS', 16); } if (!defined('HTTP_URL_STRIP_AUTH')) { define('HTTP_URL_STRIP_AUTH', 32); } if (!defined('HTTP_URL_STRIP_PORT')) { define('HTTP_URL_STRIP_PORT', 64); } if (!defined('HTTP_URL_STRIP_PATH')) { define('HTTP_URL_STRIP_PATH', 128); } if (!defined('HTTP_URL_STRIP_QUERY')) { define('HTTP_URL_STRIP_QUERY', 256); } if (!defined('HTTP_URL_STRIP_FRAGMENT')) { define('HTTP_URL_STRIP_FRAGMENT', 512); } if (!defined('HTTP_URL_STRIP_ALL')) { define('HTTP_URL_STRIP_ALL', 1024); } if (!function_exists('http_build_url')) { /** * Build a URL. * * The parts of the second URL will be merged into the first according to * the flags argument. * * @param mixed $url (part(s) of) an URL in form of a string or * associative array like parse_url() returns * @param mixed $parts same as the first argument * @param int $flags a bitmask of binary or'ed HTTP_URL constants; * HTTP_URL_REPLACE is the default * @param array $new_url if set, it will be filled with the parts of the * composed url like parse_url() would return * @return string */ function http_build_url($url, $parts = array(), $flags = HTTP_URL_REPLACE, &$new_url = array()) { is_array($url) || $url = parse_url($url); is_array($parts) || $parts = parse_url($parts); isset($url['query']) && is_string($url['query']) || $url['query'] = null; isset($parts['query']) && is_string($parts['query']) || $parts['query'] = null; $keys = array('user', 'pass', 'port', 'path', 'query', 'fragment'); // HTTP_URL_STRIP_ALL and HTTP_URL_STRIP_AUTH cover several other flags. if ($flags & HTTP_URL_STRIP_ALL) { $flags |= HTTP_URL_STRIP_USER | HTTP_URL_STRIP_PASS | HTTP_URL_STRIP_PORT | HTTP_URL_STRIP_PATH | HTTP_URL_STRIP_QUERY | HTTP_URL_STRIP_FRAGMENT; } elseif ($flags & HTTP_URL_STRIP_AUTH) { $flags |= HTTP_URL_STRIP_USER | HTTP_URL_STRIP_PASS; } // Schema and host are alwasy replaced foreach (array('scheme', 'host') as $part) { if (isset($parts[$part])) { $url[$part] = $parts[$part]; } } if ($flags & HTTP_URL_REPLACE) { foreach ($keys as $key) { if (isset($parts[$key])) { $url[$key] = $parts[$key]; } } } else { if (isset($parts['path']) && ($flags & HTTP_URL_JOIN_PATH)) { if (isset($url['path']) && substr($parts['path'], 0, 1) !== '/') { $url['path'] = rtrim( str_replace(basename($url['path']), '', $url['path']), '/' ) . '/' . ltrim($parts['path'], '/'); } else { $url['path'] = $parts['path']; } } if (isset($parts['query']) && ($flags & HTTP_URL_JOIN_QUERY)) { if (isset($url['query'])) { parse_str($url['query'], $url_query); parse_str($parts['query'], $parts_query); $url['query'] = http_build_query( array_replace_recursive( $url_query, $parts_query ) ); } else { $url['query'] = $parts['query']; } } } if (isset($url['path']) && substr($url['path'], 0, 1) !== '/') { $url['path'] = '/' . $url['path']; } foreach ($keys as $key) { $strip = 'HTTP_URL_STRIP_' . strtoupper($key); if ($flags & constant($strip)) { unset($url[$key]); } } $parsed_string = ''; if (isset($url['scheme'])) { $parsed_string .= $url['scheme'] . '://'; } if (isset($url['user'])) { $parsed_string .= $url['user']; if (isset($url['pass'])) { $parsed_string .= ':' . $url['pass']; } $parsed_string .= '@'; } if (isset($url['host'])) { $parsed_string .= $url['host']; } if (isset($url['port'])) { $parsed_string .= ':' . $url['port']; } if (!empty($url['path'])) { $parsed_string .= $url['path']; } else { $parsed_string .= '/'; } if (isset($url['query'])) { $parsed_string .= '?' . $url['query']; } if (isset($url['fragment'])) { $parsed_string .= '#' . $url['fragment']; } $new_url = $url; return $parsed_string; } } var_dump( http_build_url(parse_url('http://example.com/blah')) );
based on T0pi1
Output for 5.4.0 - 7.2.0
string(23) "http://example.com/blah"