【问题标题】:Echo only a part of an URL (string)仅回显 URL 的一部分(字符串)
【发布时间】:2015-07-08 00:57:32
【问题描述】:

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

不管他怎么打,我都想这样回应:example.com

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

我该怎么做?

【问题讨论】:

    标签: php


    【解决方案1】:

    使用parse_url()PHP_URL_HOST 组件作为第二个参数:

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

    (我得到了this answer 的一些帮助,以确保 URL 始终附加一个协议。)

    【讨论】:

    • 有趣。我没有资格作为“严重格式错误的网址”。让我修改它来解决这个问题。
    • @JohnConde 来自手册页:提示 如果您只想检查一个字符串是否包含在另一个字符串中,请不要使用 preg_match()。请改用 strpos() 或 strstr(),因为它们会更快。
    • 公平地说,他正在寻找 2 个字符串,httphttps
    • @Dagon,是的,但他不需要,因为其中一个字符串是另一个字符串的子字符串。提示有效。
    • 但是我想如果“http”是域的一部分,检查整个事情是有意义的。我现在就闭嘴。
    【解决方案2】:

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

    $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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多