【问题标题】:PHP - parse current URLPHP - 解析当前 URL
【发布时间】:2011-08-01 16:37:36
【问题描述】:

我需要解析当前的 url,以便在以下任何一种情况下:

http://mydomain.com/abc/
http://www.mydomain.com/abc/

我可以获得“abc”的返回值(或该位置的任何文本)。我该怎么做?

【问题讨论】:

  • 查看内置的 PHP 函数 parse_url。这应该可以满足您的需求。

标签: php parsing


【解决方案1】:

您可以使用parse_url();

$url = 'http://www.mydomain.com/abc/';

print_r(parse_url($url));

echo parse_url($url, PHP_URL_PATH);

这会给你

Array
(
    [scheme] => http
    [host] => www.mydomain.com
    [path] => /abc/
)
/abc/

更新:获取当前页面url然后解析:

function curPageURL() {
 $pageURL = 'http';
 if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
 $pageURL .= "://";
 if ($_SERVER["SERVER_PORT"] != "80") {
  $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
 } else {
  $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
 }
 return $pageURL;
}

print_r(parse_url(curPageURL()));

echo parse_url($url, PHP_URL_PATH);

source for curPageURL function

【讨论】:

  • 谢谢,但有没有办法从浏览器自动获取当前网址?我无法对其进行硬编码。
  • 我有一个问题,如果你不在 url 中使用 http:// 怎么办,如果我只有 mydomain.com/abc/,我试过但它只返回路径。
  • @AleksandarĐorđević 我不得不删除 PHP_URL_PATH,并使用默认参数 (-1),以便它返回一个类似答案的数组。
【解决方案2】:

看看parse_url() 函数。它会将您的 URL 分解为其组成部分。您关心的部分是路径,因此您可以将PHP_URL_PATH 作为第二个参数传递。如果您只想要路径的第一部分,则可以使用explode() 将其拆分,使用/ 作为分隔符。

$url = "http://www.mydomain.com/abc/";
$path = parse_url($url, PHP_URL_PATH);
$pathComponents = explode("/", trim($path, "/")); // trim to prevent
                                                  // empty array elements
echo $pathComponents[0]; // prints 'abc'

【讨论】:

    【解决方案3】:

    要检索当前 URL,您可以使用 $url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 之类的东西

    如果你想完全匹配路径的第一个和第二个 / 之间的内容,请尝试直接使用$_SERVER['REQUEST_URI']

    <?php
    
    function match_uri($str)
    {
      preg_match('|^/([^/]+)|', $str, $matches);
    
      if (!isset($matches[1]))
        return false;
    
      return $matches[1];  
    }
    
    echo match_uri($_SERVER['REQUEST_URI']);
    

    只是为了好玩,使用 strpos() + substr() 而不是 preg_match() 的版本应该快几微秒:

    function match_uri($str)
    {
      if ($str{0} != '/')
        return false;
    
      $second_slash_pos = strpos($str, '/', 1);
    
      if ($second_slash_pos !== false)
        return substr($str, 1, $second_slash_pos-1);
      else
        return substr($str, 1);
    }
    

    HTH

    【讨论】:

      【解决方案4】:
      <?php
      $url = "http://www.mydomain.com/abc/"; //https://www... http://... https://...
      echo substr(parse_url($url)['path'],1,-1); //return abc
      ?>
      

      【讨论】:

      • 注意:echo parse_url($url)['path']; 返回/abc/ 然后substr(...,1,-1) 去掉了前导和尾随的斜线/,所以最终结果变成abc
      • 您也可以使用 trim() 的可选参数。 trim(parse_url($url)['path'],'/')
      【解决方案5】:
      $url = 'http://www.mydomain.in/abc/';
      
      print_r(parse_url($url));
      
      echo parse_url($url, PHP_URL_host);
      

      【讨论】:

        【解决方案6】:
        <?function urlSegment($i = NULL) {
        static $uri;
        if ( NULL === $uri )
        {
            $uri = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
            $uri = explode( '/', $uri );
            $uri = array_filter( $uri );
            $uri = array_values( $uri );
        }
        if ( NULL === $i )
        {
            return '/' . implode( '/', $uri );
        }
        $i =  ( int ) $i - 1;
        $uri = str_replace('%20', ' ', $uri);
        return isset( $uri[$i] ) ? $uri[$i] : NULL;} ?>
        

        浏览器中的示例地址:http://localhost/this/is/a/sample url

        <?  urlSegment(1); //this
        urlSegment(4); //sample url?>
        

        【讨论】:

          猜你喜欢
          • 2012-01-02
          • 2012-08-14
          • 1970-01-01
          • 1970-01-01
          • 2023-03-12
          • 1970-01-01
          • 2013-05-25
          • 2010-12-03
          相关资源
          最近更新 更多