PHP POST请求中含&符号的参数如何正确获取?
解决PHP中获取含特殊字符(&)的参数问题
这问题很典型——你遇到的是URL特殊字符的解析问题!当你在URL里传company=Abc & lmn时,这里的&被浏览器/服务器当成了参数分隔符,所以服务器会把&后面的lmn当成一个新的参数,自然company就只拿到Abc了。下面给你两种场景的解决方案:
1. GET请求(URL传参)的处理
如果是通过URL传递参数,必须对包含特殊字符(&、空格、=等)的参数值做URL编码,把特殊字符转换成服务器能识别的编码格式:
- 手动编码的话,
Abc & lmn要改成Abc%20%26%20lmn(%20是空格的编码,%26是&的编码) - 用PHP生成URL的话,用
urlencode()函数自动处理:
这样拼接出来的URL里,$companyValue = 'Abc & lmn'; $encodedCompany = urlencode($companyValue); // 拼接成URL:?session1=123&token=2&company=' . $encodedCompany;company的参数值是编码后的,服务器解析时就会把它当成完整的字符串,$_REQUEST['company']就能拿到Abc & lmn。
2. POST请求的处理
如果是通过表单或者API发送POST请求,处理起来更简单:
- 普通表单提交:确保表单的
enctype是默认的application/x-www-form-urlencoded(一般不用特意写,浏览器会自动对表单数据做URL编码),直接用$_POST['company']就能获取完整值。 - 手动构造POST请求(比如用CURL):用
http_build_query()函数来生成POST数据,它会自动帮你编码所有参数值:$postParams = [ 'session1' => '123', 'token' => '2', 'company' => 'Abc & lmn' ]; $postData = http_build_query($postParams); // 然后用CURL发送$postData作为POST内容即可
顺便修正你代码里的小细节
我注意到你代码里用了&&,这应该是HTML转义后的字符,在PHP里逻辑判断要用&&(逻辑与),而不是&(位与),所以修正后的代码如下:
if(isset($_REQUEST["session1"]) && isset($_REQUEST["token"]) && isset($_REQUEST["company"])){ $session1 = $_REQUEST["session1"]; $token = $_REQUEST["token"]; $company = $_REQUEST["company"]; $result = $session1 ." ". $token ." ". $company; echo $result; }
这样调整后,只要参数传递时做了正确的编码,就能输出完整的123 2 Abc & lmn啦!
内容的提问来源于stack exchange,提问作者TejpalBh
相关产品推荐
相关产品推荐

