Як отримати параметри з рядка URL?


199

У мене є поле форми 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
Dexter Huinda


Можливий дублікат рядка
1818

Відповіді:


415

Ви можете використовувати parse_url()і parse_str()для цього.

$parts = parse_url($url);
parse_str($parts['query'], $query);
echo $query['email'];

Якщо ви хочете $urlдинамічно отримати PHP, погляньте на це питання:

Отримайте повну URL-адресу в PHP


2
працює, але я отримую помилку в журналах, таких як: PHP Повідомлення: Не визначений індекс: запит
Srinivas08

113

Всі параметри після ?можна отримати доступ за допомогою $_GETмасиву. Так,

echo $_GET['email'];

вилучить електронні листи з URL-адрес.


50
Це не відповідь на питання, але це відповідь, яку я шукав, коли я задав питання Googles, тому +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/en/function.parse-url.php


5
ОП заявив, що не отримує URL-адрес address bar. Ці URL-адреси - це лише рядки INкоду.
DavChana

7

ви можете використовувати код нижче, щоб отримати електронну адресу після? в URL-адресі

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


3
ОП вимагає вилучення змінних із рядка, а не URL-адреси на поточній сторінці. parse_url () - правильна відповідь, припускаючи, що рядок правильно відформатований.
Блофер

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

Також ви можете виконати цю роботу за допомогою регексу .

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 . Ви можете скористатися цим:

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
Чи можете ви спробуйте детальніше відповісти. Важко отримати те, що ви маєте на увазі під вищевказаною відповіддю.
Мустафа Ехсан Алокозай

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-адресами отримати параметри:

$email = filter_input( INPUT_GET, 'email', FILTER_SANITIZE_EMAIL );

Для інших типів змінних, ви хочете вибрати інший / відповідний фільтр, такий як FILTER_SANITIZE_STRING.

Я припускаю, що ця відповідь робить більше, ніж саме те, про що задається питання - отримання необроблених даних з параметра URL-адреси. Але це однорядковий ярлик, який є таким же результатом, як і цей:

$email = $_GET['email'];
$email = filter_var( $email, FILTER_SANITIZE_EMAIL );

Можна також ввійти в звичку захоплювати змінні таким чином.


whooops, не бачив останнього рядка запитань про те, щоб не отримати це з 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

-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-адрес, ви можете скористатися циклом, щоб отримати параметр 'email' з усіх цих рядків URL-адрес і зберегти їх у масиві.


1
Я не отримую ці рядки з адресного рядка браузера, але ви розмістили рішення для цього
Мохаммед

ОП запитували про PHP, а не JavaScript
Jacob Alvarez
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.