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


Posted in PHP onOctober 26, 2015

下面一段代码是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®ion=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®ion=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"](返回类似:/index.php?name=tank&sex=1)

第二种、利用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 相关文章推荐
让PHP支持页面回退的两种方法[转]
Feb 14 PHP
php去掉字符串的最后一个字符附substr()的用法
Mar 23 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
图解找出PHP配置文件php.ini的路径的方法
Aug 20 PHP
thinkphp循环结构用法实例
Nov 24 PHP
php函数重载的替代方法--伪重载详解
May 08 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
Nov 16 PHP
无需数据库在线投票调查php代码
Jul 20 PHP
PHP获取客户端及服务器端IP的封装类
Jul 21 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
Jul 28 PHP
ThinkPHP的SAE开发相关注意事项详解
Oct 09 PHP
Laravel 类和接口注入相关的代码
Oct 15 PHP
php实现CSV文件导入和导出
Oct 24 #PHP
PHP错误Warning:mysql_query()解决方法
Oct 24 #PHP
php实现表单多按钮提交action的处理方法
Oct 24 #PHP
一个简单至极的PHP缓存类代码
Oct 23 #PHP
10款实用的PHP开源工具
Oct 23 #PHP
PHP制作用户注册系统
Oct 23 #PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
Oct 23 #PHP
You might like
深入php var_dump()函数的详解
2013/06/05 PHP
基于header的一些常用指令详解
2013/06/06 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
用脚本调用样式的几种方法
2006/12/09 Javascript
一页面多XMLHttpRequest对象
2007/01/22 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
在for循环中length值是否需要缓存
2015/07/27 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
AngularJS 服务详细讲解及示例代码
2016/08/17 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
2017/03/11 Javascript
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
Vue.js实现的计算器功能完整示例
2018/07/11 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
JS实现进度条动态加载特效
2020/03/25 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
Python实现对象转换为xml的方法示例
2017/06/08 Python
python使用knn实现特征向量分类
2018/12/26 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
Windows下python3安装tkinter的问题及解决方法
2020/01/06 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
HTML5 CSS3新的WEB标准和浏览器支持
2009/07/16 HTML / CSS
八年级历史教学反思
2014/01/10 职场文书
法院授权委托书范文
2014/08/02 职场文书
工程技术员岗位职责
2015/04/11 职场文书
幼儿园园长六一致辞
2015/07/31 职场文书
爱岗敬业先进典型事迹材料(2016推荐版)
2016/02/26 职场文书
详解python的异常捕获
2022/03/03 Python