PHP拼接带用户信息的URL时hash参数前缀丢失问题
问题原因与解决方案
核心诱因
你遇到的参数丢失问题根源是未对用户输入的参数值做URL编码就直接拼接URL,$_REQUEST['email']的取值中包含&、=或其他URL特殊控制字符,这些字符会被URL解析规则识别为参数分隔符,直接打乱了后续hash参数的结构,该问题和你用什么方式拼接字符串无关。
你可以通过var_dump(urlencode($email))调试,就能看到$email中隐藏的、会破坏URL结构的特殊字符。
修复方案
推荐方案:使用PHP原生函数拼接参数
不要手动拼接URL参数,直接用PHP内置的http_build_query函数,它会自动对所有参数值做URL编码,从根源避免参数结构被破坏:
$name = $_REQUEST['username']; $email = $_REQUEST['email']; $hash = md5(rand(0, 5000)); $params = [ 'username' => $name, 'email' => $email, 'hash' => $hash ]; $url = "https://website.net/path/file.php?" . http_build_query($params);
手动拼接的正确写法
如果一定要手动拼接,必须对每个用户输入的参数值单独做urlencode处理:
$name = urlencode($_REQUEST['username']); $email = urlencode($_REQUEST['email']); $hash = md5(rand(0, 5000)); $url = "https://website.net/path/file.php?username=" . $name . "&email=" . $email . "&hash=" . $hash;
内容的提问来源于stack exchange,提问作者GabiKleebi
相关产品推荐
相关产品推荐

