Php 仅回显URL(字符串)的一部分
我有一个输入字段,用户可以在其中键入URL。他可以用多种不同的方式键入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?://#",
- www.example.com
- example.com/index.php
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”是域的一部分,那么检查整个内容是有意义的。我现在就闭嘴。