我有一个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
参数?
请注意,我没有从浏览器地址栏中获取这些字符串。
答案 0 :(得分:354)
您可以使用parse_url()
和parse_str()
。
$parts = parse_url($url);
parse_str($parts['query'], $query);
echo $query['email'];
如果您想使用PHP动态获取$url
,请查看以下问题:
答案 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)
这里还没有提到令我惊讶的更安全的答案:
因此,在出现问题的情况下,您可以使用它来从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'并将它们存储在数组中。