php解析url并得到url中的参数及获取url参数的四种方式

5年以前  |  阅读数:677 次  |  编程语言:PHP 

下面一段代码是php解析url并得到url中的参数,代码如下所示:


    <?php
    $url = 'http://www.baidu.com/index.php?m=content&c;=index&a;=lists&catid;=6&area;=0&author;=0&h;=0&region;=0&s;=1&page;=1';
    $arr = parse_url($url);
    var_dump($arr);
    $arr_query = convertUrlQuery($arr['query']);
    var_dump($arr_query);
    var_dump(getUrlQuery($arr_query));
    /**
     * 将字符串参数变为数组
     * @param $query
     * @return array array (size=10)
              'm' => string 'content' (length=7)
              'c' => string 'index' (length=5)
              'a' => string 'lists' (length=5)
              'catid' => string '6' (length=1)
              'area' => string '0' (length=1)
              'author' => string '0' (length=1)
              'h' => string '0' (length=1)
              'region' => string '0' (length=1)
              's' => string '1' (length=1)
              'page' => string '1' (length=1)
     */
    function convertUrlQuery($query)
    {
      $queryParts = explode('&', $query);
      $params = array();
      foreach ($queryParts as $param) {
        $item = explode('=', $param);
        $params[$item[0]] = $item[1];
      }
      return $params;
    }
    /**
     * 将参数变为字符串
     * @param $array_query
     * @return string string 'm=content&c;=index&a;=lists&catid;=6&area;=0&author;=0&h;=0&region;=0&s;=1&page;=1' (length=73)
     */
    function getUrlQuery($array_query)
    {
      $tmp = array();
      foreach($array_query as $k=>$param)
      {
        $tmp[] = $k.'='.$param;
      }
      $params = implode('&',$tmp);
      return $params;
    }

下面通过四种实例给大家介绍php url 参数获取方式。

在已知URL参数的情况下,我们可以根据自身情况采用$_GET来获取相应的参数信息($_GET['name']);那,在未知情况下如何获取到URL上的参数信息呢?

第一种、利用$_SERVER内置数组变量

相对较为原始的$_SERVER['QUERY_STRING']来获取,URL的参数,通常使用这个变量返回的会是类似这样的数据:name=tank&sex;=1
如果需要包含文件名的话可以使用$_SERVER"REQUEST_URI"

第二种、利用pathinfo内置函数

代码如下:


    <?php
    $test = pathinfo("http://localhost/index.php");
    print_r($test);
    /*

结果如下


    Array
    (
       [dirname] => http://localhost //url的路径
       [basename] => index.php //完整文件名
       [extension] => php //文件名后缀
       [filename] => index //文件名
    )
    */
    ?>

第三种、利用parse_url内置函数

代码如下:


    <?php
    $test = parse_url("http://localhost/index.php?name=tank&sex;=1#top");
    print_r($test);
    /*

结果如下


    Array
    (
       [scheme] => http //使用什么协议
       [host] => localhost //主机名
       [path] => /index.php //路径
       [query] => name=tank&sex;=1 // 所传的参数
       [fragment] => top //后面根的锚点
    )
    */
    ?>

第四种、利用basename内置函数

代码如下:


    <?php
    $test = basename("http://localhost/index.php?name=tank&sex;=1#top");
    echo $test;
    /*

结果如下


    index.php?name=tank&sex;=1#top
    */
    ?>

另外,还有就是自己通过正则匹配的处理方式来获取需要的值了。这种方式较为精确,效率暂不考虑。。。
下面拓展实践下正则处理方式:

代码如下:


    <?php
    preg_match_all("/(\w+=\w+)(#\w+)?/i","http://localhost/index.php?name=tank&sex;=1#top",$match);
    print_r($match);
    /*

结果如下


    Array
    (
      [0] => Array
        (
          [0] => name=tank
          [1] => sex=1#top
        )
      [1] => Array
         (
          [0] => name=tank
           [1] => sex=1
         )
       [2] => Array
        (
           [0] =>
          [1] => #top
        )
    )
    */
    ?>
 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例