239

我有一个 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仅从这些 URL/值中获取参数?

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

4

13 回答 13

485

你可以使用parse_url()and parse_str()

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

如果你想$url用 PHP 动态获取,看看这个问题:

获取 PHP 中的完整 URL

于 2012-07-14T03:47:17.973 回答
134

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

echo $_GET['email'];

将从 url 中提取电子邮件。

于 2012-07-14T03:29:15.770 回答
50

使用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 ) 
于 2012-07-14T04:01:07.080 回答
12

正如另一个答案中提到的,最好的解决方案是使用parse_url().

您需要使用parse_url()和的组合parse_str()

解析 URL 并返回其parse_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
于 2018-11-11T09:49:58.687 回答
8

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

于 2012-07-14T03:56:42.560 回答
7

您可以使用以下代码在 URL 之后获取电子邮件地址?

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

于 2016-02-08T10:18:16.123 回答
3

我从 Ruel 的回答中创建了一个函数。

你可以使用这个:

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。

于 2017-03-14T12:53:52.820 回答
2
$uri = $_SERVER["REQUEST_URI"];
$uriArray = explode('/', $uri);
$page_url = $uriArray[1];
$page_url2 = $uriArray[2];
echo $page_url; <- See the value

这对我使用 PHP 非常有用。

于 2016-06-27T10:20:47.627 回答
2

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

filter_input

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

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

对于其他类型的变量,您可能需要选择不同/适当的过滤器,例如FILTER_SANITIZE_STRING.

我想这个答案不仅仅是问题所要求的——从 URL 参数中获取原始数据。但这是一个与以下结果相同的单行快捷方式:

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

不妨养成以这种方式抓取变量的习惯。

于 2020-02-18T17:39:32.067 回答
1
$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
于 2019-07-12T15:46:27.370 回答
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;
}
于 2019-07-12T17:14:18.553 回答
0

解析字符串 URL 并获取 URL 中传递的查询参数的值的动态函数:

function getParamFromUrl($url, $paramName){
  parse_str(parse_url($url, PHP_URL_QUERY), $op); // Fetch query parameters from a string and convert to an associative array
  return array_key_exists($paramName, $op) ? $op[$paramName] : "Not Found"; // Check if the key exists in this array
}

调用函数得到结果:

echo getParamFromUrl('https://google.co.in?name=james&surname=bond', 'surname'); // "bond" will be output here
于 2019-10-09T10:14:32.623 回答
-4

为了从 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 字符串中获取参数“电子邮件”并将它们存储在数组中。

于 2018-10-09T06:42:42.723 回答