自定义的parse_url逆向函数http_build_url,将数组转为url字符串

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
时间: 2024-10-04 03:55:29

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

android byte字节数组转换十六进制字符串(物联网开发总结)

想起前段时间的物联网的外包开发,经常遇到通过wifi接受的数据,要通过转换成十六进制字符串,或者最后又是十进制数据.都是根据双方的协议来开发的.那么我发送过去的数据也需要,经过特殊转换成byte字节发过去,硬件那边收到不至于乱码的数据. 1.硬件调试发给android这边是十六进制数据 原始数据:68 38 38 68 A 72 78 55 34 12 43 23 01 07 Y 00 00 00 0C 13 78 56 34 12 0C 3B 78 34 12 0C 26 78 56 34 1

php自定义函数及内部函数----数组处理函数

一.增加元素 (1)array_push() : 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度. 注释:如果用 array_push() 来给数组增加一个单元,还不如用 $array[] =,因为这样没有调用函数的额外负担. 注释:如果第一个参数不是数组,array_push() 将发出一条警告.这和 $var[] 的行为不同,后者会新建一个数组. $a=array("a"=>"xiao","b"=>&q

088-PHP数组运用 - 通过循环函数过滤部分数组

<?php function myfunc(&$arr){ //自定义一个过滤函数 $j=count($arr); for($i=0;$i<$j;$i++){ if($arr[$i]%2==0) unset($arr[$i]); } } $arr=array(23,14,37,263,244,379,100,153,150); //定义一个数组 echo '数组进行过滤之前的信息:<br />'; print_r($arr); myfunc($arr); //调用自定义函数

【前端小小白的学习之路】----&gt;用JS编写一个函数,返回数组中重复出现过的元素

用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: var arr = [1, 2, 3, 1, 2, 3, 4, 5]; var getRepeat = function (arr) { var obj = {}; for (var i = 0, len = arr.length; i < len; i++) { if (obj[arr[i]] == undefined) { obj[arr[i]] = 1; } else { obj[arr[i]]++; } } for (var

归约函数reduce&amp;映射数组map(笔记)

function forEach(array,action){ for(var i=0;i<array.length;i++) action(array[i]); } function reduce(combine,base,array){ forEach(array,function(element){ base=combine(base,element);}) return base; } function countZeroes(array){ function counter(total

【转载】让c++ 函数返回一个数组

在c++中是不允许数组作为函数的返回值的 int [] someFunction( ); //ILLEGAL 要想实现函数返回一个数组,那返回对应数组里面类型的指针 you must return a pointer to the array base type and have the pointer point to the array. So, the function declaration would be as follows: int* someFunction( ); //Leg

指针 指针与数组 指针与字符串 指针与函数 结构体与指针 宏

指针 指针与数组 指针与字符串 指针与函数?? 指针与数组 1.数组名:数组元素首地址 eg: int array[3]={1,3,6}; 这里array 恒等于&array[0] 2.int *p = a; int *p = 0; int a[]={0}; 3.int *p = a; 均指向数组的首地址 *p是? *(p+1)是?(*p)+1是? *(p+1)决定向下移动几个字节是类型 4.指针可以当数组名使用 p[1] = 3; 恒等于a[1] ;恒等于*(p+1);恒等于*(a+1) 5.

编程之美 - 写一个函数,返回数组中所有元素被第一个元素除的结果

问题: 写一个函数,返回数组中所有元素被第一个元素除的结果,包含第一个元素,也要自己除自己 分析: 主要注意两点:1,判断输入是否合法:2,判断除数是否为0:3,从后往前除(真猥琐) 代码实现: 1 /* div_array.cc 2 * 2014/09/03 create 3 * 写一个函数,返回数组中所有元素被第一个元素除的结果,包含第一个元素,也要自己除自己 4 */ 5 #include <iostream> 6 using namespace std; 7 8 void div_ar

使用内存管理函数实现动态数组

C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间释放,为有效地使用内存资源提供了手段. 动态数组,指的就是利用内存的申请和释放函数,在程序的运行过程中,根据实际需要指定数组的大小.其本质就是一个指向数组的指针变量. 主要用到的内存管理函数是:malloc和free. 1.分配内存函数malloc: 调用形式:(类型说明符*)malloc(size): 功     能:在内存的动态存储区中分配一块长度为size字节的连续区域. 返     回:该区域