Как получить параметры из строки URL?

421
79

У меня есть поле формы 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-адресов/значений?


Обратите внимание, что я не получаю эти строки из адресной строки браузера.

спросил(а) 2012-07-14T06:27:00+04:00 8 лет назад
1
Решение
601

Вы можете использовать parse_url() и parse_str() для этого.


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

Если вы хотите динамически получать $url с помощью PHP, посмотрите на этот вопрос:


Получить полный URL-адрес в PHP

ответил(а) 2012-07-14T06:47:00+04:00 8 лет назад
312

Все параметры после ? можно получить с помощью массива $_GET. Таким образом,


echo $_GET['email'];

будет извлекать письма из URL-адресов.

ответил(а) 2012-07-14T06:29:00+04:00 8 лет назад
196

Используйте 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 )

ответил(а) 2012-07-14T07:01:00+04:00 8 лет назад
118

Используйте $_GET ['email'] для параметров в URL.
Используйте $_POST ['email'] для опубликованных данных на script.
Или используйте _ $ЗАПРОС для обоих.
Кроме того, как уже упоминалось, вы можете использовать функцию parse_url(), которая возвращает все части URL. Используйте часть под названием "запрос" - там вы можете найти свой параметр электронной почты. Дополнительная информация: http://php.net/manual/en/function.parse-url.php

ответил(а) 2012-07-14T06:56:00+04:00 8 лет назад
88

вы можете использовать ниже код для получения адреса электронной почты после? в URL


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

ответил(а) 2016-02-08T13:18:00+03:00 4 года, 5 месяцев назад
69

Я создал функцию из ответа @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

ответил(а) 2017-03-14T15:53:00+03:00 3 года, 4 месяца назад
39

Вы можете получить параметры url следующим образом:


email = $_GET["email"];

.. или вот так:


$url = $_SERVER["REQUEST_URI"];
$email = str_replace("/path/to/file.php?email=", "", $url);

Примеры пути к файлу:


если URL-адрес выглядит следующим образом:


https://example.com/file.php

тогда путь к файлу:


/file.php (+ parameter to get. Example: ?email=)

ответил(а) 2017-07-07T15:49:00+03:00 3 года назад
39

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

Это работает Grate для меня, используя php

ответил(а) 2016-06-27T13:20:00+03:00 4 года, 1 месяц назад
-6

вы можете использовать filter_input()
см. руководство по php

ответил(а) 2017-05-04T20:52:00+03:00 3 года, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема