用PHP整理URL
许多应用程序需要用户输入URL,结果会出现很多问题。我最近在寻找一种将URL作为输入并允许我确保其格式正确的内容。没有什么可以做的,所以我决定自己写。
以下函数将URL作为字符串输入,并尝试对其进行清理。它本质上是通过拆分来实现的,然后使用该parse_url()功能将其重新放回原处。为了确保此功能正常工作,您需要在URL前面放置一个模式,因此该功能要做的第一件事(在修剪字符串之后)是检查模式是否存在。如果不是,则该函数将其添加到末尾。
function tidyUrl($url){
//修剪绳子
$url = trim($url);
//检查一个模式,如果没有,则添加它
if(substr($url,0,5)!='https' && substr($url,0,4)!='http' && substr($url,0,3)!='ftp'){
$url = 'http://'.$url;
};
parse the url
$parsed = @parse_url($url);
if(!is_array($parsed)){
return false;
}
//重建网址
$url = isset($parsed['scheme']) ? $parsed['scheme'].':'.((strtolower($parsed['scheme']) == 'mailto') ? '' : '//'):'';
$url .= isset($parsed['user']) ? $parsed['user'].(isset($parsed['pass']) ? ':'.$parsed['pass'] : '').'@' : '';
$url .= isset($parsed['host']) ? $parsed['host'] : '';
$url .= isset($parsed['port']) ? ':'.$parsed['port'] : '';
//如果不存在路径,则添加一个斜线
if(isset($parsed['path'])){
$url .= (substr($parsed['path'],0,1) == '/') ? $parsed['path'] : ('/'.$parsed['path']);
}else{
$url .= '/';
};
//追加查询
$url .= isset($parsed['query']) ? '?'.$parsed['query'] : '';
//返回网址字符串
return $url;
}该parse_url()函数应该返回一个成功的数组,如果不成功,则该函数将对此进行检查并返回false。
如果要为存储的任何URL保留标准格式,此功能也很有用。从长远来看,要使此操作更容易,您应该在任何域URL后面加上斜杠。如果用户未添加任何内容,则该功能会将其添加到末尾。