Php 仅回显URL(字符串)的一部分

Php 仅回显URL(字符串)的一部分,php,Php,我有一个输入字段,用户可以在其中键入URL。他可以用多种不同的方式键入URL,例如: www.example.com example.com/index.php 不管他怎么打,我都想这样回应:example.com 只有当它是子域时,它应该是这样的:subdomain.example.com 如何执行此操作?使用PHP\u URL\u HOST组件作为第二个参数: $url = 'example.com/index.php'; if (preg_match("#https?://#",

我有一个输入字段,用户可以在其中键入URL。他可以用多种不同的方式键入URL,例如:

  • www.example.com
  • example.com/index.php
不管他怎么打,我都想这样回应:example.com

只有当它是子域时,它应该是这样的:subdomain.example.com

如何执行此操作?

使用
PHP\u URL\u HOST
组件作为第二个参数:

$url = 'example.com/index.php';
if (preg_match("#https?://#", $url) === 0) {
    $url = 'http://'.$url;
}
echo parse_url($url, PHP_URL_HOST);

(我得到了一些来自的帮助,以确保URL始终附有协议。)

我允许自己回答我自己的问题:

$url = 'https://www.example.com/index.php';
$str = preg_replace('#^https?://|www.#', '', rtrim($url,'/'));
echo (strpos($str,'/') !== false) ? strstr($str, '/', true) : $str;

您可以根据需要定义$url。结果总是example.com

有趣。我没有资格成为“格式严重错误的url”。让我修改它来解决这个问题。@johncode从手册页:提示如果您只想检查一个字符串是否包含在另一个字符串中,请不要使用preg_match()。使用strpos()或strstr(),因为它们会更快。公平地说,他正在寻找两个字符串,
http
https
@Dagon,是的,但他不需要,因为其中一个字符串是另一个字符串的子字符串。提示是有效的。但是我想如果“http”是域的一部分,那么检查整个内容是有意义的。我现在就闭嘴。