URL处理几个关键的函数parse_url、parse_str与http_build_query

parse_url()

该函数可以解析 URL,返回其组成部分。它的用法如下:

array parse_url(string $url)

此函数返回一个关联数组,包含现有 URL 的各种组成部分。如果缺少了其中的某一个,则不会为这个组成部分创建数组项。组成部分为:

  • scheme - 如 http
  • host - 如 localhost
  • port - 如 80
  • user
  • pass
  • path - 如 /parse_str.php
  • query - 在问号 ? 之后  如 id=1&category=php&title=php-install
  • fragment - 在散列符号 # 之后

此函数并不意味着给定的 URL 是合法的,它只是将上方列表中的各部分分开。parse_url() 可接受不完整的 URL,并尽量将其解析正确。此函数对相对路径的 URL 不起作用。

1
2
3
4
5
6
<?php
    $url = "http://52php.cnblogs.com/welcome/";
    $parts = parse_url($url);
     
    print_r($parts);
?>

程序运行结果如下:

1
2
3
4
5
6
Array
(
    [scheme] => http
    [host] => 52php.cnblogs.com
    [path] => /welcome/
)
1
2
3
4
5
6
<?php
    $url = 'http://username:password@hostname/path?arg=value#anchor';
    print_r(parse_url($url));
    echo '<br />';
    echo parse_url($url, PHP_URL_PATH);
?>

程序输出:

1
2
3
4
5
6
7
8
9
10
Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)

可以看到,可以很容易分解出一个URL的各个部,那如果要拿指定的部分出来的话也很容易,如:

1
echo parse_url($url, PHP_URL_PATH);

就是在第二个参数中,设定如下的参数:PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PORT, PHP_URL_USER, PHP_URL_PASS, PHP_URL_PATH, PHP_URL_QUERY or PHP_URL_FRAGMENT。


parse_str()

parse_str用来解析URL中的查询字符串,即可以通过$_SERVER['QUERY_STRING']取得的字符串值,假如我们请求的URL是 http://localhost/parse_str.php?id=1&category=php&title=php-install,那么$_SERVER['QUERY_STRING']返回的值为id=1&category=php&title=php-install,而这种形式的字符串恰巧可以使用parse_str解析成关联数组的形式。

用法如下:

void parse_str(string $str [, array &$arr ])

该函数接收两个参数,$str为需要解析的字符串,而可选参数$arr为解析之后生成的数组值所存放的变量名,如果忽略可选参数,那么可以直接调用类似$id、$category、$title的变量。下面的脚本模拟了GET请求。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
<a href="http://localhost/parse_str.php?id=1&category=php&title=php-install">Click Here</a>
$query_str = $_SERVER['QUERY_STRING'];
parse_str($query_str); /* 这种方式可以直接使用变量$id, $category, $title */
parse_str($query_str, $query_arr);
?>
<pre><?php print_r($query_arr); ?></pre>
<p><?php echo $id; ?></p>
<p><?php echo $category; ?></p>
<p><?php echo $title; ?></p>
?>
 
/* 运行结果 */
Array
(
    [id] => 1
    [category] => php
    [title] => php-install
)
1
php
php-install

http_build_query 就是将一个数组转换成url ?后面的参数字符串,会自动进行urlencode处理

string http_build_query ( array formdata [, string numeric_prefix])

后面的给数组中没有指定键或者键为数字的加下标

官方手册:http://php.net/manual/zh/function.http-build-query.php

php 获取URL 各部分参数的更多相关文章

  1. 如何获取url中的参数并传递给iframe中的报表

    在使用报表软件时,用户系统左边一般有目录树,点击报表节点就会在右侧网页的iframe中显示出报表,同时点击的时候也会传递一些参数给网页,比如时间和用户信息等.如何使网页中的报表能够获取到传递过来的参数 ...

  2. 使用JS,获取URL中指定参数的值

    /** * 获取URL中指定参数的值 * * @param name 参数名称 * @returns */ function getQueryString(name) { var reg = new ...

  3. APPCAN开发笔记:html页面之间的参数传递:使用js获取url中的参数,以及在APPCAN中不能使用的解决方法

    用PHP的GET/POST方式来传递方式已经是司空见惯了,但是如果我的页面是一个静态的html的页面,想传递参数的时候要怎么办呢?在APPCAN的开发中我们会经常遇到这样的问题,因为所有的页面都是静态 ...

  4. javaScript获取url中的参数

    var urlTools = { //获取RUL参数值 getUrlParam: function(name) { /*?videoId=identification */ var params = ...

  5. vue中如何不通过路由直接获取url中的参数

    前言:为什么要不通过路由直接获取url中的参数? vue中使用路由的方式设置url参数,但是这种方式必须要在路径中附带参数,而且这个参数是需要在vue的路由中提前设置好的. 相对来说,在某些情况下直接 ...

  6. 获取url中的参数\+发送ajax请求根路径|+获取复选框的值

    //获取url中的参数function getUrlParam(name) { var reg = new RegExp("(^|&)" + name + "=( ...

  7. js获取url中的参数对象、js生成带参数的url

    // 获取url中的参数,并返回一个对象 $.getRequestData = function() { var url = location.search; //获取url中"?" ...

  8. js 获取url中的参数 修改url 参数 移除url参数

    js 获取url中的参数 修改url 参数 移除url参数 var jsUrlHelper = { getUrlParam : function(url, ref) { var str = " ...

  9. 使用JavaScript获取URL中的参数(两种方法)

    本文给大家分享两种方法使用js获取url中的参数,其中方法二是使用的正则表达式方法,大家可以根据需要选择比较好的方法,废话不多说了,直接看详细介绍吧. 方法一: //取url参数 var type = ...

  10. jQuery 获取url中的参数

    //获取url中的参数 function getUrlParam(name) { var reg = new RegExp("(^|&)" + name + "= ...

随机推荐

  1. jQuery杂谈一

    1.jQuery对象 jQuery包装集对象 获得mydiv的Jquery对象: var divJquery = $("#mydiv"); 2.基础选择器 1.ID选择器格式:$( ...

  2. Python-字符版gif图

    一.背景 上一篇文章我们讲了怎么做自己的炫酷二维码,需要的移驾Python-炫酷二维码,本片文章我们讲述下怎么把一张图片处理成字符版图片,就是说使用字符替代每个像素的颜色,形成一个由字符组成的图片,并 ...

  3. Python与家国天下

    导读:Python猫是一只喵星来客,它爱地球的一切,特别爱优雅而无所不能的 Python.我是它的人类朋友豌豆花下猫,被授权润色与发表它的文章.如果你是第一次看到这个系列文章,那我强烈建议,请先看看它 ...

  4. 讲解:为什么重写equals时必须重写hashCode方法

    一 :string类型的==和equals的区别: 结论:"=="是判断两个字符串的内存地址是否相等,equals是比较两个字符串的值是否相等,具体就不做扩展了,有兴趣的同学可以去 ...

  5. css样式的继承性、层叠性 、优先级

    一.css样式的继承性: 作用:给父元素设置一些属性,子元素也可以使用 应用场景: 一般用于设置网页上的一些共性信息,例如网页的文字颜色,字体,文字大小等内容.优化代码,降低工作量 注意点: 1.并不 ...

  6. SharePoint布局页创建(实战)

    分享人:广州华软 极简 一. 前言 SharePoint有母版页及布局页,母版页控制页面头部.底部,而布局页则控制页面中间内容区域.通过布局页,可以快速修改页面内容区域. SharePoint的页面布 ...

  7. 对 MES 感兴趣?赶紧看过来!

    在知乎许久都没有智能制造话题,索性自己在 2018-06-08 创建了智能制造话题,在创建话题过程中也遇到些麻烦,最终联系了知乎小管家,成功创建了该话题.目前过去7个月了,该话题的关注人数有820人了 ...

  8. geoserver矢量瓦片发服务前端展示偏移问题解决

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 在之前的<项目角度谈矢量切片运用以及Geoserver处理自定义 ...

  9. NFS挂载异常 mount.nfs: Input/output error

    [root@localhost ~]# vi /etc/exports #增加/nfs 192.168.10.132(rw,no_root_squash,no_all_squash,async) [r ...

  10. 批量插入一张表的数据,并且生成不同的uuid 字符截取 批量更新 去除重复数据

    INSERT INTO party_branchSELECT UUID(),m.name,m.secreta_name,m.contacts_name,m.contact_phon,m.categor ...