我有一个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 /值中只获得电子邮件参数?

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


当前回答

使用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 ) 

其他回答

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

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

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

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

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

parse_url()解析URL并返回其组件,您可以使用查询键获取查询字符串。然后您应该使用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

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

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 );

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

使用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 )