我有一个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

etc.

如何从这些url /值中只获得电子邮件参数?

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


当前回答

在Laravel中,我使用:

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

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

其他回答

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

echo $_GET['email'];

将从url中提取电子邮件。

为此,您可以使用parse_url()和parse_str()。

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

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

获取完整的PHP URL

一个更可靠的答案,我很惊讶这里没有提到:

filter_input

所以在这个问题的情况下,你可以使用这个来从URL get参数中获取一个电子邮件值:

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

对于其他类型的变量,您可能希望选择一个不同的/适当的过滤器,例如FILTER_SANITIZE_STRING。

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

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

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

$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

你可以使用下面的代码来获取邮件地址之后?在URL:

< ?php 如果(isset($ _gets[‘电子邮件’]) echo $ _GET[邮件’]; 的