3

次のコードによると、 PHP の$host_nameようなものexample.comが通知を返します:Message: Undefined index: hostしかし、PHP のような完全な URLhttp://example.comでは が返されますexample.com。FALSE と NULL を使用して if ステートメントを試しましたが、うまくいきませんでした。

$host_name = $this->input->post('host_name');
$parse = parse_url($host_name);
$parse_url = $parse['host'];

example.com を受け入れて返すようにスクリプトを変更するにはどうすればよいですか?

4

4 に答える 4

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"
}
于 2012-12-23T11:21:22.530 に答える
5
  1. php をアップグレードします。 5.4.7 Fixed host recognition when scheme is ommitted and a leading component separator is present.

  2. スキームを手動で追加します。if(mb_substr($host_name, 0, 4) !== 'http') $host_name = 'http://' . $host_name;

于 2012-12-23T11:10:07.730 に答える
4

その場合は、デフォルトのスキームを追加するだけです:

if (strpos($host_name, '://') === false) {
    $host_name = 'http://' . $host_name;
}
$parse = parse_url($host_name);
于 2012-12-23T11:10:14.363 に答える
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 
于 2015-09-17T09:54:12.267 に答える