上一篇
2025年7月最新动态:随着PHP 8.4的稳定版发布,URL处理函数在性能上有了显著优化,尤其是在解析含特殊字符的复杂URL时,速度提升了约15%,这对于依赖URL参数处理的Web应用(如电商平台、API服务)来说是个好消息。
在Web开发中,URL经常需要传递参数,
https://example.com/search?keyword=PHP+教程&page=2
但URL中不能直接包含空格、中文等字符,所以会被编码成PHP+%E6%95%99%E7%A8%8B
,这时候就需要解码还原内容,或者拆解URL获取参数。
urldecode()
:基础解码$encoded = "PHP+%E6%95%99%E7%A8%8B"; echo urldecode($encoded); // 输出:PHP 教程
注意:会被转成空格,适合处理表单提交的application/x-www-form-urlencoded
数据。
rawurldecode()
:保留加号$encoded = "PHP%20%E6%95%99%E7%A8%8B"; echo rawurldecode($encoded); // 输出:PHP 教程
区别:不会转换,严格遵循RFC 3986标准。
parse_url()
拆解URL结构$url = "https://user:pass@example.com:8080/path?key=value#fragment"; print_r(parse_url($url));
输出:
Array (
[scheme] => https
[host] => example.com
[port] => 8080
[user] => user
[pass] => pass
[path] => /path
[query] => key=value
[fragment] => fragment
)
parse_str()
解析查询字符串$query = "name=张三&age=25"; parse_str($query, $output); print_r($output); // 输出:Array ( [name] => 张三 [age] => 25 )
$_GET
自动解析(仅限当前请求)// 访问 /test.php?city=北京 echo $_GET['city']; // 直接输出:北京
preg_match('/\?page=(\d+)/', $url, $matches); echo $matches[1]; // 提取page参数值
需求:从?id=123&redirect=https%3A%2F%2Fexample.com
中安全提取参数。
$url = "https://mysite.com/?id=123&redirect=https%3A%2F%2Fexample.com"; // 1. 解析URL $parts = parse_url($url); // 2. 解码查询参数 parse_str($parts['query'], $params); // 3. 安全处理 $id = (int)$params['id']; // 转整数防SQL注入 $redirect = filter_var( urldecode($params['redirect']), FILTER_VALIDATE_URL ); echo "ID: $id, Redirect: " . ($redirect ? "合法" : "非法");
编码不一致:
encodeURIComponent()
编码,PHP要用rawurldecode()
解码。 空格问题:
str_replace('+', '%20', $str)
再解码。 多层编码:
%2520
这类双重编码,需连续解码两次。 本文由 庹丹 于2025-07-31发表在【云服务器提供商】,文中图片由(庹丹)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/495692.html
发表评论