用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后面加上斜杠。如果用户未添加任何内容,则该功能会将其添加到末尾。