Bagaimana cara mendapatkan parameter dari string URL?

197

Saya memiliki bidang formulir HTML yang $_POST["url"]memiliki beberapa string URL sebagai nilainya. Nilai contoh adalah:

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]

dll.

Bagaimana saya bisa mendapatkan hanya emailparameter dari URL / nilai ini?

Harap perhatikan bahwa saya tidak mendapatkan string ini dari bilah alamat browser.

Asim Zaidi
sumber
Saya agak bingung, tolong jelaskan Q ...
Dexter Huinda
Are you saying/asking for the URLs to be treated as strings?
hjpotter92
If you want to "match" the email part from strings, like in your examples, use regular expressions. Could be as simple as /(email=\w\@\w\.\w)/ or more advanced matching techniques. Just giving you the idea. See preg_match function: php.net/manual/en/function.preg-match.php
Dexter Huinda
Kemungkinan duplikat dari string URL permintaan URL
jww

Jawaban:

414

Anda dapat menggunakan parse_url()dan parse_str()untuk itu.

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

Jika Anda ingin mendapatkan $urlPHP secara dinamis, lihat pertanyaan ini:

Dapatkan URL lengkap dalam PHP

Ruel
sumber
2
ini berfungsi tetapi saya mendapatkan kesalahan dalam log seperti ini: Pemberitahuan PHP: Indeks tidak ditentukan: query
Srinivas08
112

Semua parameter setelahnya ?dapat diakses menggunakan $_GETarray. Begitu,

echo $_GET['email'];

akan mengekstrak email dari url.

hjpotter92
sumber
50
Ini bukan jawaban untuk pertanyaan itu, tetapi ini adalah jawaban yang saya cari ketika saya menanyakan pertanyaan kepada Google, jadi +1 menjawab Google dengan benar.
BillyNair
1
Ini mungkin bukan jawaban untuk pertanyaan tetapi merupakan cara yang benar dan termudah untuk mendapatkan parameter URL - jika mereka diatur dengan benar: https://[email protected] $email = $_GET['email']; $email === '[email protected]';
CheddarMonkey
45

Gunakan metode parse_url () dan parse_str () . parse_url()akan mengurai string URL ke dalam array asosiatif dari bagian-bagiannya. Karena Anda hanya menginginkan satu bagian URL, Anda dapat menggunakan pintasan untuk mengembalikan nilai string hanya dengan bagian yang Anda inginkan. Selanjutnya, parse_str()akan membuat variabel untuk setiap parameter dalam string kueri. Saya tidak suka mencemari konteks saat ini, jadi memberikan parameter kedua menempatkan semua variabel ke dalam array asosiatif.

$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 ) 
JCotton
sumber
8

Gunakan $_GET['email']untuk parameter dalam URL. Gunakan $_POST['email']untuk data yang diposting ke skrip. Atau gunakan _$REQUESTuntuk keduanya. Selain itu, seperti yang disebutkan, Anda dapat menggunakan parse_url()fungsi yang mengembalikan semua bagian URL. Gunakan bagian yang disebut 'permintaan' - di sana Anda dapat menemukan parameter email Anda. Info lebih lanjut: http://php.net/manual/en/function.parse-url.php

Paul Denisevich
sumber
5
OP mengatakan dia tidak mendapatkan URL dari address bar. URL-URL ini hanya berupa strings INthe code.
DavChana
7

Anda dapat menggunakan kode di bawah ini untuk mendapatkan alamat email setelah? dalam URL

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

Gulshan kumar
sumber
3
OP meminta mengekstraksi variabel dari string bukan URL di halaman saat ini. parse_url () adalah jawaban yang benar dengan asumsi string diformat dengan benar.
Bloafer
6

Seperti disebutkan dalam jawaban lain, solusi terbaik adalah menggunakan

parse_url()

Anda perlu menggunakan kombinasi parse_url()dan parse_str().

The parse_url()URL mengurai dan kembali komponennya bahwa Anda bisa mendapatkan query string menggunakan querykunci. Maka Anda harus menggunakan parse_str()string kueri parse dan mengembalikan nilai ke dalam variabel.

$url = "https://example.com/test/1234?basic=2&[email protected]";
parse_str(parse_url($url)['query'], $params);
echo $params['email']; // [email protected]

Anda juga dapat melakukan pekerjaan ini menggunakan regex .

preg_match()

Anda dapat menggunakan preg_match()untuk mendapatkan nilai spesifik dari string kueri dari URL.

preg_match("/&?email=([^&]+)/", $url, $matches);
echo $matches[1]; // [email protected]

preg_replace()

Anda juga dapat menggunakannya preg_replace()untuk melakukan pekerjaan ini dalam satu baris!

$email = preg_replace("/^https?:\/\/.*\?.*email=([^&]+).*$/", "$1", $url);
// [email protected]
Mohammad
sumber
3

Saya membuat fungsi dari jawaban @Ruel . Anda bisa menggunakan ini:

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

Contoh:

$url = "https://example.com/test/the-page-here/1234?someurl=key&[email protected]";
echo get_valueFromStringUrl($url , "email");

Terima kasih kepada @Ruel

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

Ini berfungsi baik untuk saya menggunakan php

Asesha George
sumber
1
Bisakah Anda mencoba menguraikan jawabannya lebih lanjut. Sulit untuk mendapatkan apa yang Anda maksud dengan jawaban di atas.
Mustafa Ehsan Alokozay
1
$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]
SHUBHAM SINGH
sumber
1

Jawaban yang jauh lebih aman yang saya terkejut belum disebutkan di sini:

filter_input

Jadi, dalam hal pertanyaan, Anda dapat menggunakan ini untuk mendapatkan nilai email dari parameter dapatkan URL:

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

Untuk jenis variabel lain, Anda ingin memilih filter yang berbeda / sesuai sepertiFILTER_SANITIZE_STRING .

Saya kira jawaban ini melakukan lebih dari apa yang ditanyakan oleh pertanyaan - mendapatkan data mentah dari parameter URL. Tetapi ini adalah pintasan satu baris yang hasilnya sama dengan ini:

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

Mungkin juga membiasakan meraih variabel dengan cara ini.

squarecandy
sumber
whooops, tidak melihat baris terakhir dari pertanyaan tentang tidak mendapatkan ini dari URL ... masih meninggalkan ini di sini kalau-kalau itu bermanfaat bagi siapa pun.
squarecandy
0

Di Laravel, saya menggunakan:

private function getValueFromString(string $string, string $key)
{
    parse_str(parse_url($string, PHP_URL_QUERY), $result);

    return isset($result[$key]) ? $result[$key] : null;
}
Ronald Araújo
sumber
0

Fungsi dinamis yang mengurai url string dan mendapatkan nilai parameter kueri yang diteruskan dalam 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
}

Panggil Function untuk mendapatkan hasil

echo getParamFromUrl('https://google.co.in?name=james&surname=bond','surname'); // bond will be o/p here
Bhargav Kaklotara
sumber
-3

Untuk mendapatkan parameter dari string URL, saya menggunakan fungsi berikut.

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

Jika ada banyak string URL, maka Anda dapat menggunakan loop untuk mendapatkan parameter 'email' dari semua string URL tersebut dan menyimpannya dalam array.

Ravi Agrawal
sumber
1
Saya tidak mendapatkan string ini dari bilah alamat browser tetapi Anda memposting solusi untuk itu
Mohammad
OP bertanya tentang PHP, bukan JavaScript
Jacob Alvarez