8

有人能告诉我如何剥离出现在http://and之间的任何东西/吗?例如,http://something/或者http://something.something.something/它更改为 just /

4

7 回答 7

12

假设您使用的是 URL 而不是包含url 的长字符串...

$path = parse_url($url, PHP_URL_PATH);
于 2012-11-22T01:09:43.450 回答
8

您可以使用parse_url,但您必须使用不同的组件重新构建 URL 的其余部分:

$components = parse_url($url);
$result = $components['path'] . '?' .
          $components['query'] . '#' .
          $components['fragment'];
于 2012-11-22T01:09:18.940 回答
2

以下将简单地返回您的 URL 的路径:

<?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/"

请注意,如果您只是想从 URL 中去除 URL Scheme 和 Host,并且想要保留Query 和 Fragment,则可以使用以下命令:

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"
于 2012-11-22T01:31:06.460 回答
2
$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,在这种情况下,返回值将是一个整数)。

于 2014-03-18T20:37:10.037 回答
0

你想要的似乎是$_SERVER['REQUEST_URI']. 或者你可以用parse_url()

或者,如果您坚持使用正则表达式,[EDIT] 不要。

于 2012-11-22T01:07:56.380 回答
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)
}
于 2013-02-02T23:21:12.850 回答
0

你可以从第一个得到它///不包括在内。

$url = "https://www.facebook.com/hhhhhh?2342";
$pos = strpos($url,"://");
$pos = false === $pos ? 0 : $pos + 3;
echo substr($url,strpos($url,'/',$pos));
于 2019-08-30T02:30:09.133 回答