根据以下代码,如果$host_name
类似于example.com
,则PHP返回通知:Message: Undefined index: host
但是在http://example.com
等完整网址上,PHP返回example.com
。我尝试使用FALSE和NULL语句但是没有用。
$host_name = $this->input->post('host_name');
$parse = parse_url($host_name);
$parse_url = $parse['host'];
如何修改脚本以接受example.com并将其返回?
答案 0 :(得分:5)
升级你的php。
5.4.7 Fixed host recognition when scheme is ommitted and a leading component separator is present.
手动添加方案:if(mb_substr($host_name, 0, 4) !== 'http') $host_name = 'http://' . $host_name;
答案 1 :(得分:5)
您可以使用filter_var
检查方案是否存在,如果不存在则预先添加一个
$host_name = 'example.com';
if (!filter_var($host_name, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED)) {
$host_name = 'http://' . $host_name;
}
$parse = parse_url($host_name);
var_dump($parse);
array(2) {
["scheme"]=>
string(4) "http"
["host"]=>
string(11) "example.com"
}
答案 2 :(得分:4)
在这种情况下只需添加默认方案:
if (strpos($host_name, '://') === false) {
$host_name = 'http://' . $host_name;
}
$parse = parse_url($host_name);
答案 3 :(得分:0)
这是一个示例函数,无论方案如何都返回真实的主机。
function gettheRealHost($Address) {
$parseUrl = parse_url(trim($Address));
return trim($parseUrl[host] ? $parseUrl[host] : array_shift(explode('/', $parseUrl[path], 2)));
}
gettheRealHost("example.com"); // Gives example.com
gettheRealHost("http://example.com"); // Gives example.com
gettheRealHost("www.example.com"); // Gives www.example.com
gettheRealHost("http://example.com/xyz"); // Gives example.com