URL处理的两个关键PHP函数parse_str与http_build_query

简单的理解这两个函数

parse_str就是将一个url ?后面的参数转换成一个数组

array parse_str(url,arr)

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

string http_build_query ( array formdata [, string numeric_prefix])

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

我们知道, PHP的 parse_str() 函数可以将 URL Query 格式的字符串解析成关联数组, 与PHP生成 $_GET 使用的相同的策略. parse_str() 的”反函数”是 http_build_query(), 它将关联数组和对象生成 URL Query 字符串. 不过, 只在PHP5之后才被支持. 所以, 我们需要编写自己的 http_build_query()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function my_http_build_query($data) {
$str = '';
foreach($data as $key = >$value) {
foreach(child_str($value) as $v) {
$str. = "$key$v&";
}
}
return substr($str, 0, strlen($str) - 1);
}
function child_str($data) {
$str = array();
if (is_array($data)) {
foreach($data as $key = >$value) {
foreach(child_str($value) as $v) {
$str[] = "[$key]$v";
}
}
} else {
// do url encoding here
$data = str_replace('&', '%26', '='.$data);
$str[] = $data;
}
return $str;
}