如何从URL字符串获取参数?


197

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

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


我有些困惑,请详细说明问题...
Dexter Huinda

您是说/要求将URL视为字符串吗?
hjpotter92

如果要像示例中那样从字符串中“匹配”电子邮件部分,请使用正则表达式。可以/(email=\w\@\w\.\w)/和更高级的匹配技术一样简单。只是给你的想法。参见preg_match函数:php.net/manual/en/function.preg-match.php
德克斯特·亨达


Answers:



112

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

echo $_GET['email'];

将从网址中提取电子邮件。


50
这不是问题的答案,但这是我向Google提出问题时一直在寻找的答案,因此+1可以正确回答Google。
BillyNair

1
这可能不是问题的答案,而是获取URL参数的正确且最简单的方法-如果设置正确,则: https://example.com?email=myemail@example.com $email = $_GET['email']; $email === 'myemail@example.com';
CheddarMonkey

45

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

8

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


5
OP表示他没有从获得URL address bar。这些URL只是IN代码字符串。
DavChana

7

您可以使用以下代码在以下位置获取电子邮件地址?在网址中

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


3
OP请求从字符串而不是当前页面中的URL提取变量。假设字符串格式正确,parse_url()是正确的答案。
Bloafer

6

如其他答案所述,最佳解决方案是使用

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

3

从@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


1
$uri = $_SERVER["REQUEST_URI"];
$uriArray = explode('/', $uri);
$page_url = $uriArray[1];
$page_url2 = $uriArray[2];
echo $page_url; <- see the value

这对使用php的我来说很棒


1
您能否尝试详细说明答案。上面的答案很难理解您的意思。
Mustafa Ehsan Alokozay

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

1

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

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

也可能养成这种方式获取变量的习惯。


糟糕,没有看到关于不从URL获取此问题的最后一行...仍保留在此处,以防对任何人有帮助。
squarecandy

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

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

感谢@ m02ph3u5提请注意的解释已经被添加
Bhargav Kaklotara

-3

为了从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'并将其存储在数组中。


1
我没有从浏览器地址栏中获取这些字符串,但您发布了解决方案
Mohammad

OP询问的是PHP,而不是JavaScript
Jacob Alvarez
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.