// Copyright: Copyright (C) 2004-2010 Pristine Communications // Set the include path if (!defined("INCPATH_SET")) { require_once dirname(__FILE__) . "/incpath.inc.php"; } // Referenced subroutines require_once "monica/errhndl.inc.php"; // parse_url_rfc1808: Our own parse_url(), in order to confirm to RFC 1808 function parse_url_rfc1808($url) { // Try PHP parse_url() first $GLOBALS["php_errormsg"] = null; set_error_handler("null_error_handler"); $url_php = parse_url($url); restore_error_handler(); // Error parsing the URL if (!is_null($GLOBALS["php_errormsg"])) { return null; } // Compose the network location/login (net_loc) if (!is_array($url_php)) { $url_php = array(); } if (array_key_exists("host", $url_php)) { $net_loc = $url_php["host"]; // Add the user and password if they exists if (array_key_exists("user", $url_php)) { if (array_key_exists("pass", $url_php)) { $net_loc = $url_php["user"] . ":" . $url_php["pass"] . "@" . $net_loc; } else { $net_loc = $url_php["user"] . "@" . $net_loc; } } // Add the port if (array_key_exists("port", $url_php)) { $need_port = true; // Skip the default port if (array_key_exists("scheme", $url_php)) { switch (strtolower($url_php["scheme"])) { case "http": if ($url_php["port"] == 80) { $need_port = false; } break; case "https": if ($url_php["port"] == 443) { $need_port = false; } break; case "ftp": if ($url_php["port"] == 21) { $need_port = false; } break; case "ftps": if ($url_php["port"] == 990) { $need_port = false; } break; case "gopher": if ($url_php["port"] == 70) { $need_port = false; } break; case "prospero": if ($url_php["port"] == 191) { $need_port = false; } break; case "wais": if ($url_php["port"] == 210) { $need_port = false; } break; } } // We need to specify the port if ($need_port) { $net_loc .= ":" . $url_php["port"]; } } } // Seperate the params from the path if (array_key_exists("path", $url_php)) { $pos = strpos($url_php["path"], ";"); if ($pos !== false) { $url_php["params"] = substr($url_php["path"], $pos+1); $url_php["path"] = substr($url_php["path"], 0, $pos); } } // Compose the URL parts by RFC 1808 $url = array(); if (array_key_exists("scheme", $url_php)) { $url["scheme"] = $url_php["scheme"]; } if (isset($net_loc)) { $url["net_loc"] = $net_loc; } if (array_key_exists("path", $url_php)) { $url["path"] = $url_php["path"]; } if (array_key_exists("params", $url_php)) { $url["params"] = $url_php["params"]; } if (array_key_exists("query", $url_php)) { $url["query"] = $url_php["query"]; } if (array_key_exists("fragment", $url_php)) { $url["fragment"] = $url_php["fragment"]; } return $url; } ?>