php使用http_build_query,parse_url,parse_str创建与解析url详解
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详解的更多相关文章
- 深入解析ThreadLocal 详解、实现原理、使用场景方法以及内存泄漏防范 多线程中篇(十七)
简介 从名称看,ThreadLocal 也就是thread和local的组合,也就是一个thread有一个local的变量副本 ThreadLocal提供了线程的本地副本,也就是说每个线程将会拥有一个 ...
- Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)
一.solr搜索流程介绍 1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下 流程说明: 首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query ...
- # Okhttp解析—Interceptor详解
Okhttp解析-Interceptor详解 Interceptor可以说是okhttp的精髓之一,Okhttp重写请求/响应.重试.缓存响应等操作,基本都是在各个Interceptor中完成的,上篇 ...
- JavaEE实战——XML文档DOM、SAX、STAX解析方式详解
原 JavaEE实战--XML文档DOM.SAX.STAX解析方式详解 2016年06月22日 23:10:35 李春春_ 阅读数:3445 标签: DOMSAXSTAXJAXPXML Pull 更多 ...
- HiveSQL解析过程详解 | 学步园
HiveSQL解析过程详解 | 学步园 http://www.xuebuyuan.com/2210261.html
- EA创建用例图步骤详解
EA创建用例图步骤详解 1 创建一个项目 2 选择需要的模型 3 新建模型包 4 新建图表 5 新建模型包 6 创建用户角色Actor 7 新建用例 8 关联用户和用例 9 最后整个项目浏览器目录结构 ...
- Java线程创建形式 Thread构造详解 多线程中篇(五)
Thread作为线程的抽象,Thread的实例用于描述线程,对线程的操纵,就是对Thread实例对象的管理与控制. 创建一个线程这个问题,也就转换为如何构造一个正确的Thread对象. 构造方法列表 ...
- DB2创建数据库常用参数详解
转自http://czmmiao.iteye.com/blog/1335801 DB2创建数据库常用参数详解 本文只介绍DB2 create database语法中的常用参数http://publib ...
- (转)DNS解析过程详解
DNS解析过程详解 原文:http://blog.csdn.net/crazw/article/details/8986504 先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的 ...
随机推荐
- 【算法导论】B树
一棵B树T是具有如下性质的有根树(设根为root): 1.每个节点x有一下域: (a)num,当前存储在节点x的关键字个数,关键字以非降序存放,因此key[i]<=key[i+1]& ...
- ios入门OC_UI晋级学什么?
1. OC 语法初步, 你可能学到面向对象最近本的概念, 并且可以大致的建立几个自以为是的类,但这仅仅是开始. 你知道为什么面向对象要有3大特性么.知道他们是用到什么设计模式的么 2. 你可能学到了N ...
- 在mysql数据库中创建oracle scott用户的四个表及插入初始化数据
在mysql数据库中创建oracle scott用户的四个表及插入初始化数据 /* 功能:创建 scott 数据库中的 dept 表 */ create table dept( deptno int ...
- 常见Css样式
css就是就是会使用文档,css2.0中文手册下载地址:http://download.csdn.net/my <!DOCTYPE html PUBLIC "-//W3C//DTD X ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十三)
游戏特效部分就先这样了,因为毕竟是Lite版本,而且是第一个App,所以咱们把主要精力放在游戏可玩逻辑上吧(虽然已经厚颜无耻的加了不少特效了). 说句题外话:游戏美工是独立开发者不可逾越的鸿沟,是无法 ...
- 学习pthreads,使用属性对象创建结合线程和分离线程
当我们创建了子线程,是让它犹如脱缰之马,信步驰骋,还是如乖巧听话的孩子,时不时教导一下呢?针对这个问题,本文介绍线程的结合和分离,结构分为三个部分,第一部分给出代码示例,第二部分对代码进行讲解,第三部 ...
- AngularJS进阶(二)AngularJS路由问题解决
AngularJS路由问题解决 遇到了一个棘手的问题:点击优惠详情时总是跳转到药店详情页面中去.再加一层地址解决了,但是后来发现问题还是来了: Could not resolve 'yhDtlMain ...
- mtk camera 移植步骤
mtk camera 移植步骤: 1, Kernel层驱动代码文件添加 /mediatek/custom/doov92_wet_tdd/kernel/imgsensor/下添加imx179_mipi_ ...
- ssh命令大全
常用格式:ssh [-l login_name] [-p port] [user@]hostname 更详细的可以用ssh -h查看. 举例 不指定用户: ssh 192.168.0.11 指定用户: ...
- 机器人操作系统ROS(indigo)与三维仿真软件V-Rep(3.2.1)通信接口使用笔记
关键字:ROS(indigo),V-Rep(3.2.1), vrep_ros_bridge(lagadic). vrep_ros_bridge提供了V-Rep和ROS之间的通信接口,可以实现使用ROS ...