You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取$_GET来源URL的最后部分?带空格州名无法完整获取

解决URL含空格时仅获取部分内容的问题

这个问题我遇到过好几次,根源出在你的.htaccess正则规则上,咱们一步步解决:

1. 修复.htaccess的URL捕获规则

你当前的RewriteRule正则[0-9a-zA-Z]+只匹配字母和数字,完全没考虑空格(或者URL编码后的%20,服务器会自动解码成空格),所以当URL是state/new%20york时,正则只能匹配到空格前的new,后面的york直接被丢弃了。

把规则改成下面这样,就能完整捕获所有除了斜杠之外的字符:

RewriteRule ^state/([^/]+)$ location.php?state=$1 [NC,L]

这里的[^/]+表示匹配任意非斜杠的字符,不管是空格、字母、数字还是其他合法URL字符,都能完整传递给location.php的state参数。

2. 紧急修复SQL注入漏洞

另外必须提醒你:你的PHP代码直接把$_GET['state']拼进SQL语句,这是严重的SQL注入漏洞!别小看这个问题,攻击者可以轻易篡改你的数据库甚至获取敏感数据。

赶紧改成预处理语句,安全又可靠:

<?php
$state = $_GET['state'];

// 使用mysqli预处理语句防止SQL注入
$stmt = $db_conx->prepare("SELECT * FROM states WHERE state = ?");
// 绑定参数,"s"表示参数是字符串类型
$stmt->bind_param("s", $state);
$stmt->execute();
// 获取查询结果
$records = $stmt->get_result();

// 后续处理记录的代码...
?>

验证效果

现在访问example.com/state/new%20york,服务器会自动把%20解码成空格,$_GET['state']就能拿到完整的new york,再通过预处理语句安全查询数据库,就能获取到对应的州数据了。

内容的提问来源于stack exchange,提问作者Pazzy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:22:19