我有一个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 /值中只获得电子邮件参数?
请注意,我不是从浏览器地址栏获取这些字符串。
我从鲁埃尔的答案中创建了一个函数。
你可以用这个:
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");
感谢@鲁埃尔。
正如在另一个答案中提到的,最好的解决方案是使用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