parse_url函数可以讲一个url字符串解析成一个数组,但是php中似乎没有parse_url的逆向函数来讲一个解析出来的数组组合成url字符串,只有一个http_build_query用来将数组组合成query string。于是我自己写了一个http_build_url函数将parse_url解析出来的数组组合成完整的url。

/**
* 根据parse_url格式的数组生成完整的url
* @param array $arr 接受parse_url解析出来的所有参数,完整参数实例如下:
* Array
* (
* [scheme] => http // 协议
* [host] => www.baidu.com // 主机
* [port] => 80 // 端口,可选
* [path] => /path/file.php // 路径(文件名),可选
* [query] => a=aaa&b=aaabbb // 参数(query string),可选
* [fragment] => 123 // 附加部分或者叫做锚点(#后面的),可选
* )
*/
function http_build_url($url_arr){
$new_url = $url_arr['scheme'] . "://".$url_arr['host'];
if(!empty($url_arr['port']))
$new_url = $new_url.":".$url_arr['port'];
$new_url = $new_url . $url_arr['path'];
if(!empty($url_arr['query']))
$new_url = $new_url . "?" . $url_arr['query'];
if(!empty($url_arr['fragment']))
$new_url = $new_url . "#" . $url_arr['fragment'];
return $new_url;
}

使用测试:

$url = "http://www.dragondean.cn:80/path/file.php?a=aaa&b=bcdefg#123";
$url_arr = parse_url($url);
print_r($url_arr); $url_new = http_build_url($url_arr);
echo $url_new;

运行结果:

Array
(
[scheme] => http
[host] => www.dragondean.cn
[port] => 80
[path] => /path/file.php
[query] => a=aaa&b=bcdefg
[fragment] => 123
)
http://www.dragondean.cn:80/path/file.php?a=aaa&b=bcdefg#123

自定义的parse_url逆向函数http_build_url,将数组转为url字符串的更多相关文章

  1. array_column() 函数[二维数组转为一维数组]

    array_column() 函数 输出数组中某个键值的集合[二维数组转为一位数组] <?php // 表示由数据库返回的可能记录集的数组 $a = array( array( 'id' =&g ...

  2. iOS开发之将字典、数组转为JSON字符串方法

    //将字典转换成json格式字符串,不含\n这些符号 + (NSString *)gs_jsonStringCompactFormatForDictionary:(NSDictionary *)dic ...

  3. vue双向绑定的时候把遍历的数组转为了字符串,并且再转回去数组进行绑定

    我的问题大家可能不太懂,我详细再解释一下,就是我通过遍历一个大的数组,多层遍历之后,最后的值还是一个小的数组,形如: aaa:[ { bbb1:[ "111","&quo ...

  4. http_build_query()就是将一个数组转换成url 问号?后面的参数字符串,并且会自动进行urlencode处理,及它的逆向函数

    http_build_query()就是将一个数组转换成url 问号?后面的参数字符串,并且会自动进行urlencode处理 例如: $data = array( 'foo'=>'bar', ' ...

  5. php课程 4-16 数组自定义函数(php数组->桶)

    php课程 4-16  数组自定义函数(php数组->桶) 一.总结 一句话总结:php的数组储存机制,和桶排序完美的结合.所以php的操作中多想多桶的操作. 二.数组自定义函数 1.相关知识 ...

  6. 量化投资_Multicharts数组操作函数_zeros()设定数组元素为0(自定义)

    1. 函数的用法类似于Python的zeros函数,给定数组尺寸,让数组的元素归零 //zeros:根据设定的尺寸长度,让一维数组的元素全部归零 inputs: arr[MaxSize]( numer ...

  7. PHP array_count_values() 函数用于统计数组中所有值出现的次数。

    定义和用法 array_count_values() 函数用于统计数组中所有值出现的次数. 本函数返回一个数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数. 语法 array_count ...

  8. phpcms v9 自定义伪静态的分页函数

    因为.这个页面还没做好..等做好了..再给大家演示...... 调用方法:$page_attr=pages_open($num[0]['cun'],$get_page,$max_page,'http: ...

  9. js面向对象自定义MyString()的构造器函数,实现内建String()属性和方法:

    js面向对象自定义MyString()的构造器函数,实现内建String()属性和方法: var s = new MyString('hello'); s.length; s[0]; // " ...

随机推荐

  1. python 环境变量设置

    Win+E --> 我的电脑 --> 右击 选择属性 --> 高级系统设置 --> 环境变量 --> 用户变量 中 找到 PATH(Path) --> 编辑 --& ...

  2. Python基本特殊方法之__new__

    __new__()和不可变对象 __new__方法的一个用途是初始化不可变对象,__new()__方法中允许创建未初始化的对象,这允许我们在__init__()方法被调用之前先设置对象的属性 例:为f ...

  3. 剑指offer-第四章解决面试题思路(复杂链表的复制)

    题目:请写一个函数clone(ComplexListNode pHead),实现复杂链表的复制. 复杂链表的数据结构如下:public class ComplexListNode{int m_nVal ...

  4. LG3380 3380 【模板】二逼平衡树(树套树)

    题意 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询k在区间内的排名 查询区间内排名为k的值 修改某一位值上的数值 查询k在区间内的前驱(前驱定义为严格小于x ...

  5. ACM学习历程—Codeforces Round #354 (Div. 2)

    http://codeforces.com/contest/676 在allzysyz学弟和hqwhqwhq的邀请下,打了我的第三场CF... 毕竟在半夜..所以本来想水到12点就去睡觉的...结果一 ...

  6. Tensorflow的采样方法:candidate sampling(zhuan)

    zhuanzi:https://blog.csdn.net/u010223750/article/details/69948463 采样介绍 假如我们有一个多分类任务或者多标签分类任务,给定训练集(x ...

  7. Browserify使用指南(转)

    让浏览器加载Nodejs模块 目前NPM上有二十多万个NodeJS模块,它们都是通过CMD的方式打包的,除了特定的可以使用CMD模块加载器加载的模块,大部分nodejs模块无法直接使用到浏览器环境中. ...

  8. 南阳OJ 1170 最大的数

    最大的数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 小明和小红在打赌说自己数学学的好,于是小花就给他们出题了,考考他们谁NB,题目是这样的给你N个数 在这n个数 ...

  9. java的Swing编程====实现鼠标双击一下==画图===getMouseClicked的方法

    总结: 使用匿名类,但是用实现接口的方式呢??? package com.aa; import java.awt.Color; import java.awt.Graphics; import jav ...

  10. 源码编译安装ceph

    标签(空格分隔): ceph,ceph安装,ceph运维 centos7系统,aarch64架构下安装最新版本的ceph(13.0.0),x86架构的环境无需修改脚本即可. 一,物理环境: 内核版本: ...