如何获得没有模式且以 php 结尾的 URL 的主机?

How can I get an URL's host without schema and ending in php?

我要爆url获取主机

$link = str_replace("www.", "", $_POST['link']);
$part1 = explode("//", $link);
$part2 = explode(".", $part1[1]);
$host = $part2[0];

所以如果 $_POST['link']

https://www.youtube.com/watch?v=udm5jUA-2bs 

我只想youtube。 在第一种方式中,我得到 explode() expects parameter 2 to be string, array given" 错误消息。

用这个方法:

$host = var_dump(parse_url($_POST['link'], PHP_URL_HOST));

我得到 www.youtube.com 但我只想要 youtube.

  • 使用模式 PHP_URL_HOSTparse_url() 函数提取 url 域。
  • 我们将使用 explode() 函数将其拆分为多个部分,使用 . 作为分隔符。
  • 现在,URL可以有两种类型,要么是youtube.com,要么是www.youtube.com,要么是%.youtube.com
  • 我们计算零件,如果它们是两个,我们使用第一个值,否则使用第二个值。

演示:https://3v4l.org/KlErW

$url_host_parts = explode('.', parse_url($_POST['link'], PHP_URL_HOST));
$host = (count($url_host_parts) == 2) ? $url_host_parts[0] : $url_host_parts[1];

没有任何 regex 会怎样?您可以使用 parse_url()explode() 来获得您想要的内容,即 youtube

<?php
$url = 'https://www.youtube.com/watch?v=udm5jUA-2bs';
$parse = parse_url($url);
//print_r($parse);
echo explode('.',$parse['host'])[1];
?>

输出:

 youtube

演示: https://3v4l.org/kG1nD

您可以在 preg_match() 中使用正则表达式来完成这项工作。

$url = "https://www.youtube.com/watch?v=udm5jUA-2bs";
preg_match("/(\w+)(?=\.\w{2,}(\/|\?|$))/", $url, $matches);
echo $matches[1]; // youtube

检查结果 demo