Split an URL into protocol, site, and resource parts

From CodeCodex

PHP[edit]

<highlightsyntax>

 /**
* Takes an URL and splits it up into it's protocol, site, and resource parts
* 
* Returns an associative array of protocol, site, and resource parts
* Note: the URL does not have to have a protocol specified 
* example:
/**
* Takes an URL and splits it up into it's protocol, site, and resource parts
* 
* Returns an associative array of protocol, port, site, and resource parts
* Note: the URL does not have to have a protocol specified 
* example:
* 
*     $url = "http://www.foo.com/blog/search?q=bar";
*     $url_parts = getUrlParts($url);
*     // $url_parts will contain the following:
*     // Array
*     // (
*     //     [protocol] => http
*     //     [port] =>
*     //     [site] => www.foo.com
*     //     [resource] => blog/search?q=bar
*     // )
*     
*     $url = "www.foo.com:8080/blog/search?q=bar";
*     $url_parts = getUrlParts($url);
*     // $url_parts will contain the following:
*     // Array
*     // (
*     //     [protocol] =>
*     //     [port] => 8080
*     //     [site] => www.foo.com
*     //     [resource] => blog/search?q=bar
*     // )
* 
* 
* @param string	The URL that you want to split up
* @return associative array 	Array containing the split up parts of the URL
*/

function getUrlParts($url) { $result = array();

// Get the protocol, site and resource parts of the URL // original url = http://example.com/blog/index?name=foo // protocol = http:// // site = example.com/ // resource = blog/index?name=foo $regex = '#^(.*?//)*([\w\.\d]*)(:(\d+))*(/*)(.*)$#'; $matches = array(); preg_match($regex, $url, $matches);

// Assign the matched parts of url to the result array $result['protocol'] = $matches[1]; $result['port'] = $matches[4]; $result['site'] = $matches[2]; $result['resource'] = $matches[6];

// clean up the site portion by removing the trailing / $result['site'] = preg_replace('#/$#', , $result['site']);

// clean up the protocol portion by removing the trailing :// $result['protocol'] = preg_replace('#://$#', , $result['protocol']);

return $result; } </pre>