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

PHP urldecode()函数无法解码URL中邮箱地址问题求助

解决URL编码邮箱无法解码的问题

我之前也碰到过一模一样的坑,其实问题根源在于PHP已经自动帮你处理了URL解码!

为什么你的现有代码不生效?

当你通过$_GET['email']获取URL参数时,PHP会自动对URL里的编码字符进行解码——换句话说,$_GET['email']已经直接是some_email@gmail.com了,完全不需要再额外调用urldecode()或者rawurldecode()。

至于你看到%40始终没转成@,大概率是你的URL参数被二次编码了:原本的%40被转成了%2540(也就是%符号本身被编码成了%25),这时候一次解码只能得到%40,必须两次解码才能还原出@。

正确的处理方案

场景1:URL是正常单次编码(仅@被转为%40)

直接使用$_GET['email']即可,不需要额外解码:

$isValid = ! User::emailExists($_GET['email']);

场景2:URL被二次编码(%40变成了%2540)

如果确认是二次编码导致的问题,就需要连续调用两次解码:

$decodedEmail = urldecode(urldecode($_GET['email']));
$isValid = ! User::emailExists($decodedEmail);

快速验证方法

你可以先打印出$_GET['email']的原始值,判断到底是哪种情况:

var_dump($_GET['email']);
  • 如果输出是string(19) "some_email%40gmail.com",说明是二次编码问题;
  • 如果输出是string(18) "some_email@gmail.com",那就是你多做了一次多余的解码操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:44:34