解析URL得到相应参数

载录于:http://www.jb51.net/article/73900.htm

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

$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内置函数

代码如下:


$test = pathinfo("http://localhost/index.php");

print_r($test);

/*

结果如下

Array

(

[dirname] => http://localhost //url的路径

[basename] => index.php //完整文件名

[extension] => php //文件名后缀

[filename] => index //文件名

)

*/

?>

第三种、利用parse_url内置函数

代码如下:


$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内置函数

代码如下:


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

echo $test;

/*

结果如下

index.php?name=tank&sex=1#top

*/

?>

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

下面拓展实践下正则处理方式:

代码如下:


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

)

)

*/

?>

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 119,408评论 16 133
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 11,448评论 0 33
  • 日光下我的名字叫影子 亦或是 游弋在孤独里的鬼 全世界的灯火阑珊 我却看不见 眼里的星辰 慢慢 成了萤火之光 在最...
    你的名字我的姓氏baymax阅读 89评论 0 0
  • 昨天跟丈母娘,小姨子以及舅太爷带着儿子去万达开小火车(逛吃,逛吃),闲逛了一大圈,小姨子买了一双自己满意的小白鞋,...
    绅绅的帅老爸阅读 52评论 0 1
  • 有时候 日出 并非壮观美丽 坚持看 是因为 需要这份平淡的鼓励 与每一天相遇
    走路的莲阅读 55评论 0 3