1.http_build_query

string http_build_query ( mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738 ]]] )

使用给出的关联(或下标)数组生成一个经过 URL-encode 的请求字符串。

参数: 
query_data 
可以是数组或包含属性的对象。

一个query_data数组可以是简单的一维结构,也可以是由数组组成的数组(其依次可以包含其它数组)。

如果query_data是一个对象,只有public属性才会加入结果。

numeric_prefix 
如果在基础数组中使用了数字下标同时给出了该参数,此参数值将会作为基础数组中的数字下标元素的前缀。

这是为了让 PHP 或其它 CGI 程序在稍后对数据进行解码时获取合法的变量名。

arg_separator 
除非指定并使用了这个参数,否则会用 arg_separator.output来分隔参数(php.ini中有此参数,默认是”&”)。

enc_type 
默认使用 PHP_QUERY_RFC1738。

如果 enc_type 是 PHP_QUERY_RFC1738,则编码将会以 » RFC 1738 标准和 application/x-www-form-urlencoded 媒体类型进行编码,空格会被编码成加号(+)。

如果 enc_type 是 PHP_QUERY_RFC3986,将根据 » RFC 3986 编码,空格会被百分号编码(%20)。

例子1:只使用query_data参数:

<?php
$data = array(
'name' => 'fdipzone',
'gender' => 'male',
'profession' => 'programmer',
'explain' => 'a new programmer'
);
echo http_build_query($data);
?>

 

输出: 
name=fdipzone&gender=male&profession=programmer&explain=a+new+programmer

例子2: query_data使用一维下标数组,指定

numeric_prefix=info_,arg_separator=#,enc_type=PHP_QUERY_RFC3986

<?php
$data = array('fdipzone','male','programmer','a new programmer');
echo http_build_query($data, 'info_', '#', PHP_QUERY_RFC3986);
?>

输出:

info_0=fdipzone#info_1=male#info_2=programmer#info_3=a%20new%20programmer

2.parse_url

parse_url 解析url,返回其组成部分

mixed parse_url ( string $url [, int $component = -1 ] )

参数: 
url 
要解析的url,无效字符将使用_来替换

component 
PHP_URL_PATH、 PHP_URL_QUERY 或 PHP_URL_FRAGMENT 的其中一个来获取 URL 中指定的部分的 string。 (除了指定为 PHP_URL_PORT 后,将返回一个 integer 的值)。

返回值: 
对严重不合格的 URL,parse_url() 可能会返回 FALSE。

返回的数据一般包含以下几种 
scheme(如http),host,port,user,pass,path,query(在问号?之后),fragment(在散列符号#之后)

例子:

<?php
$url = 'http://fdipzone:123456@www.fdipzone.com:80/test/index.php?id=1#tag';
print_r(parse_url($url)); echo parse_url($url, PHP_URL_SCHEME).PHP_EOL;
echo parse_url($url, PHP_URL_HOST).PHP_EOL;
echo parse_url($url, PHP_URL_PORT).PHP_EOL;
echo parse_url($url, PHP_URL_USER).PHP_EOL;
echo parse_url($url, PHP_URL_PASS).PHP_EOL;
echo parse_url($url, PHP_URL_PATH).PHP_EOL;
echo parse_url($url, PHP_URL_QUERY).PHP_EOL;
echo parse_url($url, PHP_URL_FRAGMENT).PHP_EOL;
?>

输出:

Array
(
[scheme] => http
[host] => www.fdipzone.com
[port] => 80
[user] => fdipzone
[pass] => 123456
[path] => /test/index.php
[query] => id=1
[fragment] => tag
)
http
www.fdipzone.com
80
fdipzone
123456
/test/index.php
id=1
tag

3.parse_str

parse_str 将字符串解析成多个变量

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

如果 str 是 URL 传递入的查询字符串(query string),则将它解析为变量并设置到当前作用域。

参数: 
str 
输入的字符串

arr 
如果设置了第二个变量arr,变量将会以数组元素的形式存入到这个数组,作为替代。

例子1:解析到当前作用域

<?php
$str = 'name=fdipzone&gender=male&profession=programer&explain=a new programmer';
parse_str($str);
echo $name.PHP_EOL;
echo $gender.PHP_EOL;
echo $profession.PHP_EOL;
echo $explain.PHP_EOL;
?>

输出:

fdipzone 
male
programer
a new programmer

例子2:结果保存到arr数组

<?php
  $str = 'name=fdipzone&gender=male&profession=programer&explain=a new programmer';
  parse_str($str, $arr);
  print_r($arr);
?>

输出:

Array
(
[name] => fdipzone
[gender] => male
[profession] => programer
[explain] => a new programmer
)

4.获取url的query参数并解析

首先使用parse_url获取query,然后在使用parse_str解析参数

<?php
  $url = 'http://www.fdipzone.com/test/index.php?name=fdipzone&gender=male&profession=programmer&explain=a new programmer';
  $query = parse_url($url, PHP_URL_QUERY);
  parse_str($query, $data);
  print_r($data);
?>

输出:

Array
(
[name] => fdipzone
[gender] => male
[profession] => programmer
[explain] => a new programmer
)
 
 

php使用http_build_query,parse_url,parse_str创建与解析url详解的更多相关文章

  1. 深入解析ThreadLocal 详解、实现原理、使用场景方法以及内存泄漏防范 多线程中篇(十七)

    简介 从名称看,ThreadLocal 也就是thread和local的组合,也就是一个thread有一个local的变量副本 ThreadLocal提供了线程的本地副本,也就是说每个线程将会拥有一个 ...

  2. Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)

    一.solr搜索流程介绍 1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下 流程说明: 首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query ...

  3. # Okhttp解析—Interceptor详解

    Okhttp解析-Interceptor详解 Interceptor可以说是okhttp的精髓之一,Okhttp重写请求/响应.重试.缓存响应等操作,基本都是在各个Interceptor中完成的,上篇 ...

  4. JavaEE实战——XML文档DOM、SAX、STAX解析方式详解

    原 JavaEE实战--XML文档DOM.SAX.STAX解析方式详解 2016年06月22日 23:10:35 李春春_ 阅读数:3445 标签: DOMSAXSTAXJAXPXML Pull 更多 ...

  5. HiveSQL解析过程详解 | 学步园

    HiveSQL解析过程详解 | 学步园   http://www.xuebuyuan.com/2210261.html

  6. EA创建用例图步骤详解

    EA创建用例图步骤详解 1 创建一个项目 2 选择需要的模型 3 新建模型包 4 新建图表 5 新建模型包 6 创建用户角色Actor 7 新建用例 8 关联用户和用例 9 最后整个项目浏览器目录结构 ...

  7. Java线程创建形式 Thread构造详解 多线程中篇(五)

    Thread作为线程的抽象,Thread的实例用于描述线程,对线程的操纵,就是对Thread实例对象的管理与控制. 创建一个线程这个问题,也就转换为如何构造一个正确的Thread对象. 构造方法列表 ...

  8. DB2创建数据库常用参数详解

    转自http://czmmiao.iteye.com/blog/1335801 DB2创建数据库常用参数详解 本文只介绍DB2 create database语法中的常用参数http://publib ...

  9. (转)DNS解析过程详解

    DNS解析过程详解 原文:http://blog.csdn.net/crazw/article/details/8986504 先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的 ...

随机推荐

  1. 读书笔记 - reword (重来)

    reword (重来) 虽然我是一个不是很喜欢看书的人,但是公认的是看书对提高个人的水平是很有帮助的. 而且我想,如果我要写一本书,我一定会经过多次校验.经过长时间思考确保无误后才会出版的.所以我想看 ...

  2. [asp.net]登录协同工作平台安全解决方案

    [摘要]公司领导说登录验证的安全性如何保证,建议采用UKEY验证类似网银解决,调用第三方YT公司产品. 解决方案: 前端页面: <embed id="s_simnew61" ...

  3. android studio中使用lambda

    环境准备 如果还没有安装Java 8,那么你应该先安装才能使用lambda和stream(译者建议在虚拟机中安装,测试使用). 像NetBeans 和IntelliJ IDEA 一类的工具和IDE就支 ...

  4. 集群通信组件tribes之集群的平行通信

    前面的集群成员维护服务为我们提供了集群内所有成员的地址端口等信息,可以通过MembershipService可以轻易从节点本地的成员列表获取集群所有的成员信息,有了这些成员信息后就可以使用可靠的TCP ...

  5. Leetcode_107_Binary Tree Level Order Traversal II

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41964067 Given a binary tree, r ...

  6. 【一天一道LeetCode】#25. Reverse Nodes in k-Group

    一天一道LeetCode系列 (一)题目 Given a linked list, reverse the nodes of a linked list k at a time and return ...

  7. AngularJS进阶(十四)AngularJS灵异代码事件

    AngularJS灵异代码事件 注:请点击此处进行充电! 事情原委 router_sys.js源代码如下: 自己在html路由跳转的代码如下: 但是在实际路由过程中,却路由到了下面的状态,相应的页面中 ...

  8. 使用swift语言进行IOS应用开发

    在Swift中能够直接使用Objective-C语言提供的api (包括系统框架与自己的定制代码),也能够在Objective-C中使用Swift提供的类和api ,还能够在一个工程中同时混合使用Sw ...

  9. Android Camera开发系列(上)——Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片

    Android Camera开发系列(上)--Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片 最近也是在搞个破相机,兼容性那叫一个不忍直视啊,于是自己翻阅了一些基本的资料,自己实现了一 ...

  10. glib-dbus 在ubuntu9.10 和 ubuntu10.04 上安装环境的搭建

    dbus-glib 安装环境搭建 安装 dbus apt-get install dbus 安装 d-feet ,用于查看 session bus 和 system bus apt-get insta ...