如何使用PHP从字符串中删除主机名?

时间:2012-11-22 01:04:39

标签: php url

有人可以告诉我如何剥离http:///之间出现的任何内容吗?例如,http://something/http://something.something.something/因此它会更改为/

7 个答案:

答案 0 :(得分:7)

您可以使用parse_url,但之后您必须使用不同的组件重新构建其余的网址:

$components = parse_url($url);
$result = $components['path'] . '?' .
          $components['query'] . '#' .
          $components['fragment'];

答案 1 :(得分:7)

假设您正在使用网址而不是包含网址的长字符串 ...

$path = parse_url($url, PHP_URL_PATH);

答案 2 :(得分:2)

以下内容只会返回您网址的路径:

<?php

$urls = array(
    'http://something.com/',
    'http://something.something.com/',
    'http://something.something.com/some/path',
    'http://something.something.com/some/path/?query=string',
    'http://something.something.com/some/path/?query=string#with-fragment',
);

foreach ($urls as $url) {
    var_dump(parse_url($url, PHP_URL_PATH));
}

#=> string(1) "/"
#=> string(1) "/"
#=> string(10) "/some/path"
#=> string(11) "/some/path/"
#=> string(11) "/some/path/"

注意,如果您只是想从网址中删除网址方案和主机,并且想要保持查询和片段,您可以使用此功能:

foreach ($urls as $url) {
    $url = parse_url($url);
    $ret = $url['path'];
    if ($url['query']) $ret .= "?{$url[query]}";
    if ($url['fragment']) $ret .= "#{$url[fragment]}";
    var_dump($ret);
}

#=> string(1) "/"
#=> string(1) "/"
#=> string(10) "/some/path"
#=> string(24) "/some/path/?query=string"
#=> string(38) "/some/path/?query=string#with-fragment"

更好的是,如果您使用的是PECL HTTP Extension,则可以使用http_build_url()方法:

foreach ($urls as $url) {
    $url = http_build_url(array_key_intersect(
        parse_url($url),
        array_flip(array('path', 'query', 'fragment'))
    ));
    var_dump($url);
}

#=> string(1) "/"
#=> string(1) "/"
#=> string(10) "/some/path"
#=> string(24) "/some/path/?query=string"
#=> string(38) "/some/path/?query=string#with-fragment"

答案 3 :(得分:0)

您想要的是$_SERVER['REQUEST_URI']。或者你可以通过parse_url()

获得

或者如果你坚持使用正则表达式,[编辑]不要。

答案 4 :(得分:0)

$url = "www.domain.com/sds?test=1&test2=2&test3=3";
$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $query_array);

无论什么之前“?”。将输出

array {
 'test' => string '1' (length=1)
 'test2' => string '2' (length=1)
 'test3' => string '3' (length=1)
}

答案 5 :(得分:0)

$url = "http://php.net/manual/en/function.parse-url.php?arg=value#anchor";

print_r(parse_url($url));

echo parse_url($url, PHP_URL_PATH);

以上示例将输出:

Array
(
    [scheme] => http
    [host] => php.net
    [path] => /manual/en/function.parse-url.php
    [query] => arg=value
    [fragment] => anchor
)

请参阅parse-url

指定PHP_URL_SCHEME,PHP_URL_HOST,PHP_URL_PORT,PHP_URL_USER,PHP_URL_PASS,PHP_URL_PATH,PHP_URL_QUERY或PHP_URL_FRAGMENT之一,以仅将特定URL组件检索为字符串(除非给出PHP_URL_PORT,否则返回值将为整数)。

答案 6 :(得分:0)

您可以从第一个/(不包括//)中获取它。

$url = "https://www.facebook.com/hhhhhh?2342";
$pos = strpos($url,"://");
$pos = false === $pos ? 0 : $pos + 3;
echo substr($url,strpos($url,'/',$pos));