示例用户输入
http://example.com/ http://example.com/topic/ http://example.com/topic/cars/ http://www.example.com/topic/questions/
我想要一个PHP函数,使输出像
example.com example.com/topic/ example.com/topic/cars/ www.example.com/topic/questions/
pbwdgjma1#
ereg_replace现在已被弃用,因此最好用途:
ereg_replace
$url = preg_replace("(^https?://)", "", $url );
这将删除http://或https://
http://
https://
inkz8wg92#
你应该使用一个“disallowed”术语的数组,并使用strpos和str_replace从传入的URL中动态删除它们:
strpos
str_replace
function remove_http($url) { $disallowed = array('http://', 'https://'); foreach($disallowed as $d) { if(strpos($url, $d) === 0) { return str_replace($d, '', $url); } } return $url; }
1sbrub3j3#
我建议使用PHP提供的工具,看看parse_url。
<?php $url = 'http://username:password@hostname/path?arg=value#anchor'; print_r(parse_url($url)); echo parse_url($url, PHP_URL_PATH); ?>
以上示例将输出:
Array ( [scheme] => http [host] => hostname [user] => username [pass] => password [path] => /path [query] => arg=value [fragment] => anchor ) /path
听起来你至少需要host + path(根据需要添加其他值,例如query):
host
path
query
$parsed = parse_url('http://www.domain.com/topic/questions/'); echo $parsed['host'], $parsed['path']; > www.domain.com/topic/questions/
干杯
jjhzyzn04#
创建阵列:
$remove = array("http://","https://");
并替换为空字符串:
str_replace($remove,"",$url);
它看起来像这样:
function removeProtocol($url){ $remove = array("http://","https://"); return str_replace($remove,"",$url); }
如果你的haystack(输入)是一个字符串,并且你用一个字符串替换了数组中的needle,那么Str_replace将返回一个字符串。这很好,这样你就可以避免所有额外的循环。
7eumitmz5#
哇。我从谷歌来到这里,期待找到一个班轮复制和粘贴!你不需要一个函数来完成这个任务,因为已经有一个函数了。
echo explode("//", "https://anyurl.any.tld/any/directory/structure", 2)[1];
在这个例子中,explode()将返回一个数组:
["https:", "anyurl.any.tld/any/directory/structure"]
我们需要第二个元素。它将处理http、https、ftp或几乎任何URI,而不需要正则表达式。https://www.php.net/manual/en/function.explode.php如果你想要一个函数:
function removeProtocols($uri) { return explode("//", $uri, 2)[1]; }
编辑:请看来自哈里·刘易斯的用户评论...这是我现在最喜欢的方式。
nxagd54h6#
您可以使用preg_replace的 * 正则表达式 * 在一行中删除https和http:
preg_replace
fn (string $url): string => preg_replace('~^https?://~', '', $url);
~^https?://~
2nbm6dog7#
你可以使用PHP的解析URL功能。这将适用于所有协议,甚至是ftp://或https://Eiter获取协议组件并从URL中substr它,或者只是将其他部分连接在一起...http://php.net/manual/de/function.parse-url.php
e5njpo688#
<?php // user input $url = 'http://www.example.com/category/website/wordpress/wordpress-security/'; $url0 = 'http://www.example.com/'; $url1 = 'http://www.example.com/category/'; $url2 = 'http://www.example.com/category/website/'; $url3 = 'http://www.example.com/category/website/wordpress/'; // print_r(parse_url($url)); // echo parse_url($url, PHP_URL_PATH); $removeprotocols = array('http://', 'https://'); echo '<br>' . str_replace($removeprotocols,"",$url0); echo '<br>' . str_replace($removeprotocols,"",$url1); echo '<br>' . str_replace($removeprotocols,"",$url2); echo '<br>' . str_replace($removeprotocols,"",$url3); ?>
swvgeqrz9#
这个解决方案对我很有效,短的。
parse_url($url, PHP_URL_HOST);
9条答案
按热度按时间pbwdgjma1#
ereg_replace
现在已被弃用,因此最好用途:这将删除
http://
或https://
inkz8wg92#
你应该使用一个“disallowed”术语的数组,并使用
strpos
和str_replace
从传入的URL中动态删除它们:1sbrub3j3#
我建议使用PHP提供的工具,看看parse_url。
以上示例将输出:
听起来你至少需要
host
+path
(根据需要添加其他值,例如query
):干杯
jjhzyzn04#
创建阵列:
并替换为空字符串:
它看起来像这样:
如果你的haystack(输入)是一个字符串,并且你用一个字符串替换了数组中的needle,那么Str_replace将返回一个字符串。这很好,这样你就可以避免所有额外的循环。
7eumitmz5#
哇。我从谷歌来到这里,期待找到一个班轮复制和粘贴!
你不需要一个函数来完成这个任务,因为已经有一个函数了。
在这个例子中,explode()将返回一个数组:
我们需要第二个元素。它将处理http、https、ftp或几乎任何URI,而不需要正则表达式。
https://www.php.net/manual/en/function.explode.php
如果你想要一个函数:
编辑:请看来自哈里·刘易斯的用户评论...这是我现在最喜欢的方式。
nxagd54h6#
您可以使用
preg_replace
的 * 正则表达式 * 在一行中删除https和http:~^https?://~
Test and Explanation(regex101.com)2nbm6dog7#
你可以使用PHP的解析URL功能。这将适用于所有协议,甚至是ftp://或https://
Eiter获取协议组件并从URL中substr它,或者只是将其他部分连接在一起...
http://php.net/manual/de/function.parse-url.php
e5njpo688#
swvgeqrz9#
这个解决方案对我很有效,短的。