php使用http_build_query,parse_url,parse_str创建与解析url

1.http_build_query

http_build_query 可以创建urlencode之后的请求字符串。

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



参数:
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
)
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`http_build_url` 是 PHP 中的一个函数,用于构建 URL。 它的语法如下: ```php string http_build_url ( string $url [, mixed $parts [, int $flags = HTTP_URL_REPLACE [, array &$new_url ]]] ) ``` 参数说明: - `$url`:必需,要被处理的 URL,可以是绝对路径或相对路径。 - `$parts`:可选,一个包含 URL 组件的关联数组(例如 `parse_url` 函数返回的数组)。 - `$flags`:可选,用于控制 URL 的重建方式,有以下几个选项: - `HTTP_URL_REPLACE`:替换所有与新 URL 相应的部分(默认值)。 - `HTTP_URL_JOIN_PATH`:将新的路径部分添加到原来的路径部分之后。 - `HTTP_URL_JOIN_QUERY`:将新的查询字符串添加到原来的查询字符串之后。 - `HTTP_URL_STRIP_USER`:从 URL 中删除用户名部分。 - `HTTP_URL_STRIP_PASS`:从 URL 中删除密码部分。 - `HTTP_URL_STRIP_AUTH`:从 URL 中删除用户名和密码部分。 - `HTTP_URL_STRIP_PORT`:从 URL 中删除端口号部分。 - `HTTP_URL_STRIP_PATH`:从 URL 中删除路径部分。 - `HTTP_URL_STRIP_QUERY`:从 URL 中删除查询字符串部分。 - `HTTP_URL_STRIP_FRAGMENT`:从 URL 中删除片段标识符部分。 - `$new_url`:可选,如果设置了此参数,则函数将返回一个新的 URL 字符串,并将其存储在 `$new_url` 变量中。 示例: ```php $url = "https://www.example.com/path/to/file.php?foo=bar#baz"; $parts = parse_url($url); $parts["query"] = "new=parameter"; $new_url = http_build_url($url, $parts); echo $new_url; // 输出: https://www.example.com/path/to/file.php?new=parameter#baz ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值