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

PHP中rawurldecode()无法显示加号,如何获取URL中的my+string?

解决URL中%2B无法正确解析为+的问题

首先得把问题根源说清楚:当浏览器请求abc.com/my%2Bstring时,Web服务器(比如Apache或Nginx)通常会先对路径部分做一次URL解码,把%2B转换成+。这时候如果你直接拿$_SERVER['PATH_INFO']这类变量,得到的已经是my+string;要是这时候你再调用urldecode(),就会把+进一步转换成空格——这就是你拿到空格的原因!

下面分两种场景给你解决方案:

场景1:直接获取原始编码的路径内容

如果你想拿到URL里未被服务器解码的原始字符串(比如my%2Bstring),可以读取$_SERVER['REQUEST_URI']来提取路径部分,再用rawurldecode()解码:

$request_uri = $_SERVER['REQUEST_URI'];
// 去掉URI开头的斜杠,拿到路径部分
$path_part = ltrim($request_uri, '/');
// 解码后得到my+string
$decoded_value = rawurldecode($path_part);
echo $decoded_value;

场景2:处理已被服务器解码的内容

如果你拿到的变量已经是服务器解码后的my+string(比如从$_SERVER['PATH_INFO']获取),千万别再用urldecode(),直接用这个值就能得到my+string;要是不小心已经做了urldecode得到了空格,也可以把空格替换回+:

// 假设$wrong_value是已经被urldecode过的"my string"
$corrected_value = str_replace(' ', '+', $wrong_value);
echo $corrected_value;

关键注意点

  • urldecode():会同时把+转成空格、解码%XX格式字符
  • rawurldecode():只解码%XX格式字符,不会处理+
  • Web服务器会自动解码URL的路径和查询参数,所以$_GET、$_SERVER['PATH_INFO']这类全局变量已经是解码后的结果,别重复解码!

内容的提问来源于stack exchange,提问作者C. Ovidiu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:36:41