url查询参数解析,最佳选项

时间:2012-07-16 20:20:50

标签: php

我的网址是

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'] 如何从上面的字符串中获取电子邮件地址?

3 个答案:

答案 0 :(得分: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”一词后面的空格在名称中计算。它可以通过以下方式检索: $email = $_GET['email '];

常规?email=[email address]查询字符串不起作用的具体原因是什么?

答案 1 :(得分:1)

明显的答案是foreach超过$_GET,并在密钥中查找电子邮件地址。 然而这不起作用,因为PHP会将电子邮件地址中的.(以及可能还有其他字符)转换为_字符,以便向后兼容{{1} }。这使得任务变得更加困难,但并非不可能:

刚刚使用它,实际上它 是不可能的,因为PHP实际上消耗了电子邮件地址中的register_globals并将其转换为.即使你得到了来自_的原始查询字符串。遗憾。

它可能适用于POST请求,因为我认为PHP不会修改可以从$_SERVER['QUERY_STRING']获取的数据 - 但是如果你可以修改它,你可能会修改请求URL以便它有一个合适的钥匙,这不会是一个问题。

答案 2 :(得分:0)

您可以通过

获取请求uri的字符串
$query=$_SERVER['REQUEST_URI'];

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