How can I get parameters from a URL string?
PhpUrl ParsingPhp Problem Overview
I have an HTML form field $_POST["url"]
, having some URL strings as the value.
Example values are:
https://example.com/test/[email protected] https://example.com/test/1234?basic=2&[email protected] https://example.com/test/[email protected] https://example.com/test/[email protected]&testin=123 https://example.com/test/the-page-here/1234?someurl=key&[email protected]
etc.
How can I get only the email
parameter from these URLs/values?
Please note that I am not getting these strings from the browser address bar.
Php Solutions
Solution 1 - Php
You can use the parse_url()
and parse_str()
for that.
$parts = parse_url($url);
parse_str($parts['query'], $query);
echo $query['email'];
If you want to get the $url
dynamically with PHP, take a look at this question:
https://stackoverflow.com/questions/6768793/get-the-full-url-in-php
Solution 2 - Php
All the parameters after ?
can be accessed using $_GET
array. So,
echo $_GET['email'];
will extract the emails from urls.
Solution 3 - Php
Use the parse_url() and parse_str() methods. parse_url()
will parse a URL string into an associative array of its parts. Since you only want a single part of the URL, you can use a shortcut to return a string value with just the part you want. Next, parse_str()
will create variables for each of the parameters in the query string. I don't like polluting the current context, so providing a second parameter puts all the variables into an associative array.
$url = "https://mysite.com/test/[email protected]&testin=123";
$query_str = parse_url($url, PHP_URL_QUERY);
parse_str($query_str, $query_params);
print_r($query_params);
//Output: Array ( [email] => [email protected] [testin] => 123 )
Solution 4 - Php
As mentioned in another answer, the best solution is using parse_url()
.
You need to use a combination of parse_url()
and parse_str()
.
The parse_url()
parses the URL and return its components that you can get the query string using the query
key. Then you should use parse_str()
that parses the query string and returns
values into a variable.
$url = "https://example.com/test/1234?basic=2&[email protected]";
parse_str(parse_url($url)['query'], $params);
echo $params['email']; // [email protected]
Also you can do this work using regex: preg_match()
You can use preg_match()
to get a specific value of the query string from a URL.
preg_match("/&?email=([^&]+)/", $url, $matches);
echo $matches[1]; // [email protected]
preg_replace()
Also you can use preg_replace()
to do this work in one line!
$email = preg_replace("/^https?:\/\/.*\?.*email=([^&]+).*$/", "$1", $url);
// [email protected]
Solution 5 - Php
Use $_GET['email']
for parameters in URL.
Use $_POST['email']
for posted data to script.
Or use _$REQUEST
for both.
Also, as mentioned, you can use parse_url()
function that returns all parts of URL. Use a part called 'query' - there you can find your email parameter. More info: http://php.net/manual/en/function.parse-url.php
Solution 6 - Php
You can use the below code to get the email address after ?
in the URL:
<?php
if (isset($_GET['email'])) {
echo $_GET['email'];
}
Solution 7 - Php
I a created function from Ruel's answer.
You can use this:
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;
}
}
Example:
$url = "https://example.com/test/the-page-here/1234?someurl=key&[email protected]";
echo get_valueFromStringUrl($url , "email");
Thanks to @Ruel.
Solution 8 - Php
$uri = $_SERVER["REQUEST_URI"];
$uriArray = explode('/', $uri);
$page_url = $uriArray[1];
$page_url2 = $uriArray[2];
echo $page_url; <- See the value
This is working great for me using PHP.
Solution 9 - Php
A much more secure answer that I'm surprised is not mentioned here yet:
So in the case of the question you can use this to get an email value from the URL get parameters:
$email = filter_input( INPUT_GET, 'email', FILTER_SANITIZE_EMAIL );
For other types of variables, you would want to choose a different/appropriate filter such as FILTER_SANITIZE_STRING
.
I suppose this answer does more than exactly what the question asks for - getting the raw data from the URL parameter. But this is a one-line shortcut that is the same result as this:
$email = $_GET['email'];
$email = filter_var( $email, FILTER_SANITIZE_EMAIL );
Might as well get into the habit of grabbing variables this way.
Solution 10 - Php
$web_url = 'http://www.writephponline.com?name=shubham&[email protected]';
$query = parse_url($web_url, PHP_URL_QUERY);
parse_str($query, $queryArray);
echo "Name: " . $queryArray['name']; // Result: shubham
echo "EMail: " . $queryArray['email']; // Result:[email protected]
Solution 11 - Php
In Laravel, I'm using:
private function getValueFromString(string $string, string $key)
{
parse_str(parse_url($string, PHP_URL_QUERY), $result);
return isset($result[$key]) ? $result[$key] : null;
}
Solution 12 - Php
A dynamic function which parses string URL and gets the value of the query parameter passed in the URL:
function getParamFromUrl($url, $paramName){
parse_str(parse_url($url, PHP_URL_QUERY), $op); // Fetch query parameters from a string and convert to an associative array
return array_key_exists($paramName, $op) ? $op[$paramName] : "Not Found"; // Check if the key exists in this array
}
Call the function to get a result:
echo getParamFromUrl('https://google.co.in?name=james&surname=bond', 'surname'); // "bond" will be output here
Solution 13 - Php
To get parameters from a URL string, I used the following function.
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');
If there are many URL strings, then you can use loop to get parameter 'email' from all those URL strings and store them in array.