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 相关文章推荐
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
Jan 29 PHP
PHP 读取文件内容代码(txt,js等)
Dec 06 PHP
服务器变量 $_SERVER 的深入解析
Jul 02 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
Jul 12 PHP
PHP闭包实例解析
Sep 08 PHP
php绘图之在图片上写中文和英文的方法
Jan 24 PHP
php导入模块文件分享
Mar 17 PHP
PHP实现无限级分类(不使用递归)
Oct 22 PHP
ThinkPHP中order()使用方法详解
Apr 19 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
Oct 08 PHP
php array_reverse 以相反的顺序返回数组实例代码
Apr 11 PHP
php实现解析xml并生成sql语句的方法
Feb 03 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中register_globals参数为OFF和ON的区别(register_globals 使用详解)
2012/02/05 PHP
解析php中curl_multi的应用
2013/07/17 PHP
php中cookie的使用方法
2014/03/29 PHP
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
js获得参数的getParameter使用示例
2014/02/26 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
老生常谈JavaScript 函数表达式
2016/09/01 Javascript
AngularJs $parse、$eval和$observe、$watch详解
2016/09/21 Javascript
express文件上传中间件Multer详解
2016/10/24 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
通过npm或yarn自动生成vue组件的方法示例
2019/02/12 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
在Python中marshal对象序列化的相关知识
2015/07/01 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
wxpython自定义下拉列表框过程图解
2020/02/14 Python
Python 添加文件注释和函数注释操作
2020/08/09 Python
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
技术总监岗位职责
2013/12/05 职场文书
销售找工作求职信
2013/12/20 职场文书
医学专业毕业生求职信
2014/06/20 职场文书
公安四风对照检查材料思想汇报
2014/10/11 职场文书
工作失误检讨书(3篇)
2014/10/11 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
Python-OpenCV实现图像缺陷检测的实例
2021/06/11 Python
Python制作动态字符画的源码
2021/08/04 Python
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers