如何从URL字符串中获取参数?

时间:2012-07-14 03:27:26

标签: php url-parsing

我有一个HTML表单字段$_POST["url"],其中包含一些URL字符串作为值。 示例值为:

https://example.com/test/1234?email=xyz@test.com
https://example.com/test/1234?basic=2&email=xyz2@test.com
https://example.com/test/1234?email=xyz3@test.com
https://example.com/test/1234?email=xyz4@test.com&testin=123
https://example.com/test/the-page-here/1234?someurl=key&email=xyz5@test.com

如何从这些网址/值中仅获取email参数?

请注意,我没有从浏览器地址栏中获取这些字符串。

14 个答案:

答案 0 :(得分:354)

您可以使用parse_url()parse_str()

$parts = parse_url($url);
parse_str($parts['query'], $query);
echo $query['email'];

如果您想使用PHP动态获取$url,请查看以下问题:

Get the full URL in PHP

答案 1 :(得分:98)

可以使用?数组访问$_GET之后的所有参数。所以,

echo $_GET['email'];

将从网址中提取电子邮件。

答案 2 :(得分:40)

使用parse_url()parse_str()方法。 parse_url()会将URL字符串解析为其各部分的关联数组。由于您只需要URL的单个部分,因此可以使用快捷方式返回仅包含所需部分的字符串值。接下来,parse_str()将为查询字符串中的每个参数创建变量。我不喜欢污染当前的上下文,因此提供第二个参数会将所有变量放入一个关联数组中。

$url = "https://mysite.com/test/1234?email=xyz4@test.com&testin=123";
$query_str = parse_url($url, PHP_URL_QUERY);
parse_str($query_str, $query_params);
print_r($query_params);

//Output: Array ( [email] => xyz4@test.com [testin] => 123 ) 

答案 3 :(得分:9)

$_GET['email']用于网址中的参数。 使用$_POST['email']将已过帐的数据用于脚本。 或者两者都使用_$REQUEST。 此外,如上所述,您可以使用返回URL的所有部分的parse_url()函数。使用名为“查询”的部分 - 您可以在那里找到您的电子邮件参数。更多信息:http://php.net/manual/en/function.parse-url.php

答案 4 :(得分:6)

您可以使用以下代码获取电子邮件地址吗?在网址

<?php
if (isset($_GET['email'])) {
    echo $_GET['email'];
}

答案 5 :(得分:3)

我创建了函数from @Ruel answer。 你可以用这个:

function get_valueFromStringUrl($url , $parameter_name)
{
    $parts = parse_url($url);
    if(isset($parts['query']))
    {
        parse_str($parts['query'], $query);
        if(isset($query[$parameter_name]))
        {
            return $query[$parameter_name];
        }
        else
        {
            return null;
        }
    }
    else
    {
        return null;
    }
}

示例:

$url = "https://example.com/test/the-page-here/1234?someurl=key&email=xyz5@test.com";
echo get_valueFromStringUrl($url , "email");

感谢@Ruel

答案 6 :(得分:3)

您可以像这样获取网址的参数:

$url = $_SERVER["REQUEST_URI"];
$email = str_replace("/path/to/file.php?email=", "", $url);

..或者像这样:

https://example.com/file.php

文件路径的示例:

如果网址如下:

/file.php (+ parameter to get. Example: ?email=)

然后文件的路径是:

{{1}}

答案 7 :(得分:3)

如其他答案所述,最佳解决方案是使用

parse_url()

您需要结合使用parse_url()parse_str()

parse_url()解析URL并返回其组成,您可以使用query键获取查询字符串。然后,您应该使用parse_str()来解析查询字符串并返回 值转换成变量。

$url = "https://example.com/test/1234?basic=2&email=xyz2@test.com";
parse_str(parse_url($url)['query'], $params);
echo $params['email']; // xyz2@test.com

您也可以使用 regex 来完成这项工作。

preg_match()

您可以使用preg_match()从URL获取查询字符串的特定值。

preg_match("/&?email=([^&]+)/", $url, $matches);
echo $matches[1]; // xyz2@test.com

preg_replace()

您还可以使用preg_replace()一行完成此工作!

$email = preg_replace("/^https?:\/\/.*\?.*email=([^&]+).*$/", "$1", $url);
// xyz2@test.com

答案 8 :(得分:2)

$uri = $_SERVER["REQUEST_URI"];
$uriArray = explode('/', $uri);
$page_url = $uriArray[1];
$page_url2 = $uriArray[2];
echo $page_url; <- see the value

这对我来说非常适合使用php

答案 9 :(得分:2)

这里还没有提到令我惊讶的更安全的答案:

filter_input

因此,在出现问题的情况下,您可以使用它来从URL get参数获取电子邮件值:

$email = filter_input( INPUT_GET, 'email', FILTER_SANITIZE_EMAIL );

对于其他类型的变量,您需要choose a different/appropriate filter,例如FILTER_SANITIZE_STRING

我想这个答案的作用不只是问题的要求-从URL参数获取原始数据。但这是单行快捷方式,其结果与此相同:

$email = $_GET['email'];
$email = filter_var( $email, FILTER_SANITIZE_EMAIL );

也可能养成这种方式获取变量的习惯。

答案 10 :(得分:0)

$web_url='http://www.writephponline.com?name=shubham&email=singh@gmail.com';
$query = parse_url($web_url,PHP_URL_QUERY);
parse_str($query,$queryArray);

echo "Name: ".$queryArray['name'];  // Result: shubham
echo "EMail: ".$queryArray['email']; // Result:singh@gmail.com

答案 11 :(得分:0)

在Laravel中,我正在使用:

private function getValueFromString(string $string, string $key)
{
    parse_str(parse_url($string, PHP_URL_QUERY), $result);

    return isset($result[$key]) ? $result[$key] : null;
}

答案 12 :(得分:0)

动态函数,用于解析字符串url并获取在URL中传递的查询参数的值

 function getParamFromUrl($url,$paramName){
   parse_str(parse_url($url,PHP_URL_QUERY),$op);// fetch query parameters from string and convert to associative array
   return array_key_exists($paramName,$op) ? $op[$paramName] : "Not Found"; // check key is exist in this array
 }

调用函数以获取结果

 echo getParamFromUrl('https://google.co.in?name=james&surname=bond','surname'); // bond will be o/p here

答案 13 :(得分:-1)

要从URL字符串获取参数,我使用了以下函数。

var getUrlParameter = function getUrlParameter(sParam) {
    var sPageURL = decodeURIComponent(window.location.search.substring(1)),
        sURLVariables = sPageURL.split('&'),
        sParameterName,
        i;

    for (i = 0; i < sURLVariables.length; i++) {
        sParameterName = sURLVariables[i].split('=');

        if (sParameterName[0] === sParam) {
            return sParameterName[1] === undefined ? true : sParameterName[1];
        }
    }
};
var email = getUrlParameter('email');

如果有很多URL字符串,则可以使用循环从所有这些URL字符串中获取参数'email'并将它们存储在数组中。