PHP开发中无法通过$_GET获取以#开头的id参数问题
异常产生的核心原因
#是URL规范定义的片段标识符保留特殊字符,浏览器会将#及其后续所有内容判定为页面内定位的锚点信息,这部分数据完全不会随HTTP请求发送到服务端,因此PHP的$_GET超全局数组无法捕获这部分参数内容。
两个测试地址的实际请求差异
- 可正常获取值的地址
http://localhost/user_notes/user.php?id=1234:浏览器发起请求时,会将完整查询串id=1234传递给服务端,PHP可正常解析得到id参数值为1234。 - 取值失效的地址
http://localhost/user_notes/user.php?id=#1234:浏览器在发起请求时,会从#的位置截断待传输内容,实际发送到服务端的查询串仅为id=,即id参数本身为空值,执行echo $_GET['id'];自然不会有任何输出。
可落地的解决方式
如果业务场景确实需要将#作为参数值的组成部分,不能直接在未编码的URL中书写#字符,必须先对参数值执行标准URL编码:#对应的URL编码值为%23,调整后可正常传值的访问地址为http://localhost/user_notes/user.php?id=%231234,该场景下PHP端的$_GET['id']会正常解析得到完整的#1234值。
内容的提问来源于stack exchange,提问作者Abhishek kamal
相关产品推荐
相关产品推荐

