这是我的第一个问题。顺便说一下,我对RegExes感到不安。
我正在考虑一个验证域或URL的PHP函数,由用户输入给出。 (子)域名应通过html输入字段收集。
因此,我必须处理不同的格式,例如http(s)://domain.tld
和domain.tld
这两种格式都可能包含路径或无效。
该函数应该纠正几乎正确的用户输入,而不是返回false。
最后,我想返回格式(sub.)domain.tld
,但仅针对真实的现有域。
我的WIP解决方案如下。你觉得怎么样?
function valDomain($url,$prefix=""){
$url = trim($url);
$url = str_replace(" ", "", $url);
$url = trim($url,'.');
$url = trim($url,'?');
$url = trim($url,'-');
$url = trim($url,'/');
$url = strtolower($url);
$url = substr($url,0,100);
if(strpos($url,'.') == false) {
return false;
}
if(strpos($url,'http') !== false) {
$x = parse_url($url);
if(isset($x['host'])){
$url = $x['host'];
}
}
if(strpos($url,'/') !== false) {
$x = explode("/", $url);
if(isset($x[0])){
$url = $x[0];
}
}
if(checkdnsrr($url,"A")){
return $prefix.$url;
} else {
return false;
}
}
解释:它整理了用户输入,检查它是否可以是一个url / domain,如果它是一个合适的url,删除路径,然后,当它只应该是原始URL,检查是否有与之对应的dns条目。只有在是的情况下,它才会返回经过验证的域。其他它返回false。
这有意义吗?
($prefix
参数可以选择用于向网址添加http://
以呈现超链接)。
检索到的结果将存储在数据库中,因此它们需要是黑客安全的。