0

我的网址中有这个

http://www.test.com/?jjjanu@gmail.com&tid=RetEm_Welcome_resp_05232012

问题是它不是

http://www.test.com/?email = jjjanu@gmail.com&tid=RetEm_Welcome_resp_05232012

notice email = jjjanu@gmail.com

所以我无法$_GET['email'] 从上面的字符串中获取电子邮件地址?

4

3 回答 3

2

给出的两个示例都不适用于所需的$_GET['email'].

第一个示例,http://www.test.com/?jjjanu@gmail.com&tid=RetEm_Welcome_resp_05232012没有电子邮件地址的“键”,因此获取它的唯一方法是遍历每个查询字符串参数,并假设无键值是电子邮件地址或执行正则表达式-匹配它。一些(非常)基本的东西是:

$email = '';
foreach ($_GET as $key => $val) {
    if (strpos($key, '@') && ($val == '')) {
        // assume this is an email address
        $email = $key;
        break;
    }
}

第二个示例,http://www.test.com/?email = jjjanu@gmail.com&tid=RetEm_Welcome_resp_05232012,“电子邮件”一词后的空格计入名称。它可以通过以下方式检索: $email = $_GET['email '];

?email=[email address]常规查询字符串不起作用是否有特定原因?

于 2012-07-16T20:25:01.227 回答
1

显而易见的答案已经foreach结束$_GET,并在密钥中查找电子邮件地址。但是这不起作用,因为 PHP 会将.电子邮件地址中的 (以及可能的其他字符)转换_为向后兼容的字符register_globals。这使任务更加困难,但并非不可能:

只是一直在玩它,实际上这不可能的,因为 PHP 实际上会.使用电子邮件地址中的 并将其转换为_即使您从$_SERVER['QUERY_STRING']. 对不起。

它可能适用于 POST 请求,因为我认为 PHP 不会修改可以从中获取的数据php://input- 但如果您可以修改它,您可能可以修改请求 URL,使其具有正确的密钥,而这些都没有会是个问题。

于 2012-07-16T20:32:21.423 回答
0

您可以通过以下方式获取请求 uri 字符串

$query=$_SERVER['REQUEST_URI'];

之后,您可以根据需要解析此查询

于 2012-07-16T20:29:12.657 回答