1

わかりました、これは私がやろうとしていることです (実際には非常に急ごしらえですが、よりスマートなものを思いついた場合に備えて投稿することにしました... :-))

それが私が考えていたことです:

function getMainPart($url)
{
     $parts = explode("/",$url);
     return str_replace(end($parts),"",$url);
}

提案するより賢い、またはより良いものはありますか? 何か案は?(または、より普遍的/PHP で直接サポートされているものはありますか?)

4

6 に答える 6

4

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
于 2012-08-08T11:50:45.507 に答える
2

多分これは助けることができます:

echo 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);

しかし、これは現在のファイルに対してのみ機能します-すべてのランダムなURLではありません;)これには、Fluffehが言ったようにparse_urlを使用する必要があります..

于 2012-08-08T11:51:16.693 に答える
2

それを行うための「正しい」(ただし、はるかに長い)方法:

function getMainPart ($url) {
    $parts = parse_url($url);
    if (!isset($parts['scheme'])) {
        return FALSE; // Not a valid, complete URL
    }
    $out = $parts['scheme'].'://';
    if (!empty($parts['user'])) {
        $out .= $parts['user'];
        if (!empty($parts['pass'])) {
            $out .= ':'.$parts['pass'];
        }
        $out .= '@';
    }
    $out .= $parts['host'];
    if (!empty($parts['port'])) {
        $out .= ':'.$parts['port'];
    }
    $out .= $parts['path'] == '/' ? '/' : dirname($parts['path']);
    return $out;
}
于 2012-08-08T11:56:36.597 に答える
1

parse_url()これには関数が必要です。

$parts = parse_url($url);
echo $parts['scheme'] ."://". $parts['host'] . $parts['path'];
于 2012-08-08T11:54:28.293 に答える
1

メイン部分が常に / で終わっていることが確実な場合、これはより短く、配列関数を含みません:

$url = 'http://www.somedomain.com/subfolder/yet-another-subfolder/final.php?param=2';
function getMainUrlPart($url) {
    return substr($url, 0, strrpos($url, '/')+1);
}
echo getMainUrlPart($url);
于 2012-08-08T11:56:14.197 に答える